contextframework/cfw/src/cfserver/CFCacheElement.cpp
changeset 0 2e3d3ce01487
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/contextframework/cfw/src/cfserver/CFCacheElement.cpp	Tue Feb 02 10:12:00 2010 +0200
@@ -0,0 +1,307 @@
+/*
+* Copyright (c) 2002-2006 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:  CCFCacheElement class implementation.
+*
+*/
+
+
+#include "CFCacheElement.h"
+#include "CFContextObjectImpl.h"
+#include "cftrace.h"
+#include "cfcontextsourceinterface.h"
+
+// CONSTANTS
+
+#ifdef _DEBUG
+// Panic category
+_LIT( KPanicCat, "CONTEXTCACHE" );
+
+// Panic codes
+enum TPanicReason
+    {
+    EInvalidSubscriptionIndex,
+    };
+
+// Local panic function
+LOCAL_C void Panic( TInt aCode )
+    {
+    User::Panic( KPanicCat, aCode );
+    }
+#endif
+
+// MEMBER FUNCTIONS
+
+CCFCacheElement* CCFCacheElement::NewL()
+    {
+    FUNC_LOG;
+
+    CCFCacheElement* self  = CCFCacheElement::NewLC();
+    CleanupStack::Pop( self );
+    
+    return self;
+    }
+
+CCFCacheElement* CCFCacheElement::NewLC()
+    {
+    FUNC_LOG;
+
+    CCFCacheElement* self = new( ELeave ) CCFCacheElement;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    
+    return self;
+    }
+
+CCFCacheElement::~CCFCacheElement()
+    {
+    FUNC_LOG;
+    
+    delete iContext;
+    iSubscriptions.Close();
+    }
+
+CCFCacheElement::CCFCacheElement()
+    {
+    FUNC_LOG;
+    }
+
+void CCFCacheElement::ConstructL()
+    {
+    FUNC_LOG;
+
+    iContext = CCFContextObject::NewL();
+    }
+
+// METHODS
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::Context
+//-----------------------------------------------------------------------------
+// 
+CCFContextObject& CCFCacheElement::Context() const
+    {
+    FUNC_LOG;
+    
+    return *iContext;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::AddSubscriptionL
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::AddSubscriptionL(
+    CCFContextSubscriptionImpl& aSubscription )
+    {
+    FUNC_LOG;
+    
+    iSubscriptions.AppendL( &aSubscription );
+    
+    // notify context source if this was the first subscription
+    if (iSubscriptions.Count() == 1 && iPublisher )
+    	{
+    	iPublisher->Subscribers( iContext->Source(), iContext->Type() );
+    	}
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::RemoveSubscription
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::RemoveSubscription( TInt aIndex )
+    {
+    FUNC_LOG;
+    
+    __ASSERT_DEBUG( aIndex >= 0 && aIndex < iSubscriptions.Count(),
+        Panic( EInvalidSubscriptionIndex ) );
+    
+    iSubscriptions.Remove( aIndex );
+
+    // notify context source if this was the first subscription
+    if (iSubscriptions.Count() == 0 && iPublisher )
+    	{
+    	iPublisher->NoSubscribers( iContext->Source(), iContext->Type() );
+    	}
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::NullifySubscription
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::NullifySubscription( TInt aIndex )
+    {
+    FUNC_LOG;
+
+    __ASSERT_DEBUG( aIndex >= 0 && aIndex < iSubscriptions.Count(),
+        Panic( EInvalidSubscriptionIndex ) );
+
+    iSubscriptions[ aIndex ] = NULL;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::RemoveNullSubscriptions
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::RemoveNullSubscriptions()
+    {
+    FUNC_LOG;
+
+    TInt count = iSubscriptions.Count();
+    for ( TInt i = count - 1; i >= 0; --i )
+        {
+        CCFContextSubscriptionImpl* subscription = iSubscriptions[ i ];
+        if ( !subscription )
+            {
+            iSubscriptions.Remove( i );
+            }
+        }
+
+    // notify context source if no more subscriptions exist
+    if ( count && iSubscriptions.Count() == 0 && iPublisher )
+        {
+        iPublisher->NoSubscribers( iContext->Source(), iContext->Type() );
+        }
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::Subscriptions
+//-----------------------------------------------------------------------------
+// 
+const RPointerArray<CCFContextSubscriptionImpl>& CCFCacheElement::Subscriptions() const
+    {
+    FUNC_LOG;
+    
+    return iSubscriptions;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetReadSecurityPolicy
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::SetReadSecurityPolicy(
+    const TSecurityPolicy& aSecurityPolicy )
+    {
+    FUNC_LOG;
+    
+    iReadSecurityPolicy = aSecurityPolicy;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::GetReadSecurityPolicy
+//-----------------------------------------------------------------------------
+// 
+const TSecurityPolicy& CCFCacheElement::GetReadSecurityPolicy() const
+    {
+    FUNC_LOG;
+    
+    return iReadSecurityPolicy;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetWriteSecurityPolicy
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::SetWriteSecurityPolicy(
+    const TSecurityPolicy& aSecurityPolicy )
+    {
+    FUNC_LOG;
+    
+    iWriteSecurityPolicy = aSecurityPolicy;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::GetWriteSecurityPolicy
+//-----------------------------------------------------------------------------
+// 
+const TSecurityPolicy& CCFCacheElement::GetWriteSecurityPolicy() const
+    {
+    FUNC_LOG;
+    
+    return iWriteSecurityPolicy;
+    }
+
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetContextPublisher
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::SetContextPublisher( MCFContextSource* aPublisher )
+    {
+    FUNC_LOG;
+
+    iPublisher = aPublisher;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::SetContextPublisher
+//-----------------------------------------------------------------------------
+// 
+void CCFCacheElement::SetContextPublisher(
+	    MCFContextSource* aPublisher, const TUid& aPublisherUid )
+    {
+    FUNC_LOG;
+    
+    iPublisher = aPublisher;
+    iPublisherUid = aPublisherUid;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::ContextPublisher
+//-----------------------------------------------------------------------------
+// 
+const MCFContextSource* CCFCacheElement::ContextPublisher() const
+    {
+    FUNC_LOG;
+    
+    return iPublisher;
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::PublisherUid
+//-----------------------------------------------------------------------------
+// 
+const TUid& CCFCacheElement::PublisherUid() const
+	{
+	FUNC_LOG;
+	
+	return iPublisherUid;
+	}
+
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::CompareByTypeAndSource
+//-----------------------------------------------------------------------------
+// 
+TInt CCFCacheElement::CompareByTypeAndSource(
+    const CCFCacheElement& aFirst,
+    const CCFCacheElement& aSecond)
+    {
+    FUNC_LOG;
+
+    return CCFContextObjectImpl::CompareByTypeAndSource(
+        *aFirst.iContext, *aSecond.iContext );
+    }
+
+//-----------------------------------------------------------------------------
+// CCFCacheElement::CompareByType
+//-----------------------------------------------------------------------------
+// 
+TInt CCFCacheElement::CompareByType(
+    const CCFCacheElement& aFirst,
+    const CCFCacheElement& aSecond)
+    {
+    FUNC_LOG;
+
+    return CCFContextObjectImpl::CompareByType(
+        *aFirst.iContext, *aSecond.iContext);
+    }