diff -r 000000000000 -r 094583676ce7 PECengine/StorageManager2/ClientSrc/CPEngStoreEntry.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PECengine/StorageManager2/ClientSrc/CPEngStoreEntry.cpp Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,282 @@ +/* +* Copyright (c) 2002 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: Store entry abstract class +* +*/ + + + +// INCLUDE FILES +#include +#include "CPEngStoreEntry.h" +#include "MPEngStorageManagerWatcher.h" +#include "MPEngStorageManager.h" +#include "PEngStorageGlobals.h" + +// Debug prints +#include "PresenceDebugPrint.h" + + +// ============================= LOCAL CLASS DEFINITION ====================== + +// CLASS DEFINITION +NONSHARABLE_CLASS( TPEngSIdsDesWraper ): + public MDesCArray + { +public: + inline TPEngSIdsDesWraper( const TDesC& aSid ) + : iSid( aSid ) + { + } +public: // from MDesC16Array + inline TInt MdcaCount() const + { + // we have only one Sid + return 1; + } + + inline TPtrC16 MdcaPoint( TInt aIndex ) const + { + // panic is index is out of 0 + __ASSERT_DEBUG( aIndex == 0, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + ( void ) aIndex; // Prevent compilation warning about unused variable + return iSid; + } + +private: // data + const TDesC& iSid; + }; + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::CPEngStoreEntry +// C++ default constructor can NOT contain any code, that might leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C CPEngStoreEntry::CPEngStoreEntry( + TPEngStorageType aStorageType ) + : iStorageType( aStorageType ) + { + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::BaseConstructL +// Symbian 2nd phase Base constructor can leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::BaseConstructL() + { + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::BaseConstructL +// Symbian 2nd phase Base constructor can leave. +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::BaseConstructL( + MPEngStorageManager& aStorageManager, + TBool aRegister /* = ETrue */ ) + { + iStorageManager = &aStorageManager; + iStorageManager->Open(); // CSI: 65 # + + if ( aRegister ) + { + TPEngSIdsDesWraper sidWrap( this->StorageId() ); + iStorageManager->StorageManagerWatcher().RegisterListenSIDsObserverL( + sidWrap, + *this, + MPEngStorageManagerWatcher::EPEngObserverInternal ); + } + } + + +// Destructor +EXPORT_C CPEngStoreEntry::~CPEngStoreEntry() + { + if ( iStorageManager ) + { + iStorageManager->StorageManagerWatcher( + ).UnregisterListenSIDsObserver( *this ); + iStorageManager->Close(); + } + } + +// ----------------------------------------------------------------------------- +// ==== Default implementation of functions from main class ==================== +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::Release +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::Release() + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + // do not check, let client crash, + // since this should be always valid pointer + iStorageManager->Unlock( *this ); + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::LockLC() +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPEngStoreEntry::LockLC() + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + TInt err( Lock() ); + CleanupReleasePushL( *this ); + return err; + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::Lock +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPEngStoreEntry::Lock( + TPengStorageLockPriority aPriority + /* EStorageLockLevelBasic */, + TBool aCreateEntry /* = ETrue */ ) const + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + + // do not check, let client crash, + // since this should be always valid pointer + return iStorageManager->Lock( *this, aPriority, aCreateEntry ); + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::Unlock +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPEngStoreEntry::Unlock() const + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + // do not check, let client crash, since this should be always valid pointer + return iStorageManager->Unlock( *this ); + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::BufferServerSideNotifications +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPEngStoreEntry::BufferServerSideNotifications() + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + return iStorageManager->BufferServerSideNotifications(); + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::ReleaseServerSideBuffering +// ----------------------------------------------------------------------------- +// +EXPORT_C TInt CPEngStoreEntry::ReleaseServerSideBuffering() + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + + return iStorageManager->ReleaseServerSideBuffering(); + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::StoreL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::StoreL() + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + iStorageManager->StoreL( *this ); + } + +// ----------------------------------------------------------------------------- +// ===================== Storage type support ================================== +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::StorageType +// ----------------------------------------------------------------------------- +// +EXPORT_C TPEngStorageType CPEngStoreEntry::StorageType() const + { + return iStorageType; + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::ChangeStorageTypeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::ChangeStorageTypeL( TPEngStorageType aNewType ) + { + __ASSERT_DEBUG( iStorageManager, User::Panic( + KPEngSMPanic, + EPEngSM_StoreManNotDefined ) ); + if ( iStorageType == aNewType ) + { + return; + } + TInt err( iStorageManager->Delete( *this ) ); + err = err == KErrNotFound ? KErrNone : err; + User::LeaveIfError( err ); + iStorageType = aNewType; + // reset version counter to zero + iEntryVersion = 0; + iStorageManager->StoreL( *this ); + } + +// ----------------------------------------------------------------------------- +// ==== New functions of MPEngSIDChangeObserver with default implementation === +// ----------------------------------------------------------------------------- + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::HandleSIDsChangeL +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::HandleSIDsChangeL( + CPtrCArray& /* aChangedSIDs */ ) + { + // does nothing + } + +// ----------------------------------------------------------------------------- +// CPEngStoreEntry::HandleSIDNotifyError +// ----------------------------------------------------------------------------- +// +EXPORT_C void CPEngStoreEntry::HandleSIDNotifyError( + TInt /* aError */ ) + { + // does nothing + } + +// End of File + + + +