diff -r 5b6f26637ad3 -r f4a778e096c2 phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CWriteCmdBase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CWriteCmdBase.h Wed Sep 01 12:29:52 2010 +0100 @@ -0,0 +1,241 @@ +/* +* Copyright (c) 2005-2007 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: A base class for write operations +* +*/ + + + +#ifndef VPBKSIMSTOREIMPL_CWRITECMDBASE_H +#define VPBKSIMSTOREIMPL_CWRITECMDBASE_H + +// INCLUDES +#include "CStoreBase.h" +#include "METelStoreNotificationObserver.h" + +#include +#include +#include +#include + +// FORWARD DECLARATIONS +class MVPbkSimContactObserver; + +namespace VPbkSimStoreImpl { + +// FORWARD DECLARATIONS +class CStoreBase; + +// CLASS DECLARATION + +/** +* An operation that writes a contact to (U)SIM card +* +*/ +NONSHARABLE_CLASS(CWriteCmdBase) : public CActive, + public MVPbkSimStoreOperation, + protected METelStoreNotificationObserver, + protected MVPbkSimCommandObserver + { + public: // Constructors and destructor + + /** + * Destructor. + */ + ~CWriteCmdBase(); + + public: // Functions from base classes + + /** + * From CActive + */ + void RunL(); + + /** + * From CActive + */ + void DoCancel(); + + protected: // Functions from base classes + + /** + * From METelStoreNotificationObserver + */ + TBool ETelStoreChanged( TInt aSimIndex, TUint32 aEvents ); + + /** + * From METelStoreNotificationObserver + */ + TBool ETelStoreChangeError( TInt aError ); + + /** + * From MVPbkSimCommandObserver + */ + void CommandDone( MVPbkSimCommand& aCommand ); + + /** + * From MVPbkSimCommandObserver + */ + void CommandError( MVPbkSimCommand& aCommand, TInt aError ); + + protected: // Construction + + /** + * C++ constructor + */ + CWriteCmdBase( CStoreBase& aStore, TInt& aSimIndex, + MVPbkSimContactObserver& aObserver ); + + /** + * By default Symbian 2nd phase constructor is private. + */ + void BaseConstructL(); + + protected: // New functions + + /** + * Must be called from the subclass Execute to + * active the command + */ + void Activate(); + + /** + * Handles error case + * @param aError the error to notify observers + */ + + void HandleError( TInt aError ); + + /** + * Removes this instance from the ETel notification + */ + void RemoveNotificationObserver(); + + /** + * @return the store + */ + inline CStoreBase& StoreBase() const; + + /** + * Activates the object and completes command using aResult. + * @param aResult The completion code. + */ + void CompleteCommandAsynchronously( TInt aResult ); + + protected: // Data + /// a refence to the sim index which is updated by the + /// ETel if the value is -1 + TInt& iSimIndex; + private: // Data + /// the store for making the ETel request + CStoreBase& iStoreBase; + /// an observer to notify in error case + MVPbkSimContactObserver& iObserver; + /// Own: the update command to execute + MVPbkSimCommand* iUpdateCommand; + /// an observer for command framework + MVPbkSimCommandObserver* iCommandObserver; + }; + +// INLINE FUNCTIONS +inline CStoreBase& CWriteCmdBase::StoreBase() const + { + return iStoreBase; + } + +/** +* A write operation template for RMobilePhoneStore::Write +*/ +template +NONSHARABLE_CLASS( CBasicWriteCmd ) : public CWriteCmdBase + { + public: // New functions + + /** + * Starts this operation + */ + void Execute(); + + protected: // Functions from base classes + + /** + * From CActive + */ + void RunL(); + + protected: // Construction + + /** + * C++ constructor + */ + CBasicWriteCmd( CStoreBase& aStore, TInt& aSimIndex, + MVPbkSimContactObserver& aObserver ); + + protected: // Data + /// The ETel contact + ETelContact iETelContact; + + private: // Data + /// A package for the ETel contact + TPckg iETelContactPckg; + /// a reference to the index to write + TInt& iSimIndex; + }; + +// ----------------------------------------------------------------------------- +// CBasicWriteCmd::CBasicWriteCmd +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +template +CBasicWriteCmd::CBasicWriteCmd( CStoreBase& aStore, + TInt& aSimIndex, MVPbkSimContactObserver& aObserver ) + : CWriteCmdBase( aStore, iETelContact.iIndex, aObserver ), + iETelContactPckg( iETelContact ), + iSimIndex( aSimIndex ) + { + } + +// ----------------------------------------------------------------------------- +// CBasicWriteCmd::Execute +// ----------------------------------------------------------------------------- +// +template +void CBasicWriteCmd::Execute() + { + VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING( + "VPbkSimStoreImpl: RMobilePhoneStore::Write h%d request slot=%d"), + StoreBase().ETelStoreBase().SubSessionHandle(),iSimIndex); + StoreBase().ETelStoreBase().Write( iStatus, iETelContactPckg ); + CWriteCmdBase::Activate(); + } + +// ----------------------------------------------------------------------------- +// CBasicWriteCmd::RunL +// ----------------------------------------------------------------------------- +// +template +void CBasicWriteCmd::RunL() + { + // ETel writes to iETelContact.iIndex. It must be copied to the index + // reference offered by the client of this dll + iSimIndex = iETelContact.iIndex; + CWriteCmdBase::RunL(); + } + +} // namespace VPbkSimStoreImpl +#endif // VPBKSIMSTOREIMPL_CWRITECMDBASE_H + +// End of File