PECengine/StorageManager2/ClientSrc/CPEngStoreEntry.cpp
changeset 0 094583676ce7
--- /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    <e32std.h>
+#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
+
+
+
+