diff -r 000000000000 -r 5e5d6b214f4f uiservicetab/vimpstcmdprocess/src/cvimpstcmdfactory.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uiservicetab/vimpstcmdprocess/src/cvimpstcmdfactory.cpp Tue Feb 02 10:12:18 2010 +0200 @@ -0,0 +1,304 @@ +/* +* 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 "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() + { + + 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() + { + + iEngine.UnIntializeStorage(); + iEngine.UnRegisterServiceSessionObserver(this); + + iObservers.Reset(); + iObservers.Close(); + + delete iArrayProcess; + iArrayProcess = NULL; + + } + + +// -------------------------------------------------------------------------- +// CVIMPSTCmdFactory::CreateCommandForIdL +// -------------------------------------------------------------------------- +// +MVIMPSTCmd* CVIMPSTCmdFactory::CreateCommandForIdL( + TImCommandId aCommandId,TAny* aData /*NULL*/) + { + + 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*) 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 ) + { + // 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 +