pimappservices/calendar/client/src/calcategorymanagerimpl.cpp
changeset 0 f979ecb2b13e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/client/src/calcategorymanagerimpl.cpp	Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,112 @@
+// Copyright (c) 2005-2009 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:
+//
+
+#include "calcategorymanagerimpl.h"
+
+#include "calclient.h"
+#include "calcategoryimpl.h"
+#include <calsession.h>
+#include "calsessionimpl.h"
+#include "calentryimpl.h"
+
+CCalCategoryManagerImpl::CCalCategoryManagerImpl(CCalSession& aSession)
+	:iCalSession(aSession)
+	{
+	iCalSession.Impl().IncrementReferenceCount();
+	}
+
+CCalCategoryManagerImpl::~CCalCategoryManagerImpl()
+	{
+	iCalSession.Impl().DecrementReferenceCount();
+	}
+
+TInt CCalCategoryManagerImpl::CategoryCountL() const
+	{
+	return iCalSession.Impl().Server().CategoryCountL(iCalSession.Impl().FileId());
+	}
+
+CCalCategory* CCalCategoryManagerImpl::CategoryL(TInt aIndex) const
+	{
+	CAgnCategory* agnCategory = iCalSession.Impl().Server().CategoryL(aIndex, iCalSession.Impl().FileId());
+	CleanupStack::PushL(agnCategory);
+	CCalCategoryImpl* categoryImpl = CCalCategoryImpl::NewL(agnCategory); // doesn't take ownership
+	categoryImpl->SetOwnAgnCategory(ETrue); // take ownership
+	CleanupStack::Pop(agnCategory);
+	CleanupStack::PushL(categoryImpl);
+	CCalCategory* ret=CCalCategory::NewL(categoryImpl);
+	CleanupStack::Pop(categoryImpl);
+	return ret;
+	}
+
+void CCalCategoryManagerImpl::AddCategoryL(const CCalCategory& aCategory)
+	{
+	if(aCategory.ExtendedCategoryName().Length()==0)
+		{
+		User::Leave(KErrArgument);
+		}
+
+	iCalSession.Impl().Server().AddCategoryToListL(aCategory.ExtendedCategoryName(), iCalSession.Impl().FileId());
+	}
+
+void CCalCategoryManagerImpl::FilterCategoryL(const CCalCategory& aCategory, RPointerArray<CCalEntry>& aEntries, MCalProgressCallBack* aProgressCallBack)
+	{
+	if (aProgressCallBack)
+		{
+		iCalSession.Impl().AsyncTaskManager().StartCategoryTaskL(*aProgressCallBack, CCalAsyncTaskManager::EFilterCategory,aCategory, &aEntries);
+		}
+	else if (! iCalSession.Impl().AsyncTaskManager().IsBusy())
+		{
+		iCalSession.Impl().Server().FilterCategorySynchronouslyL(*(aCategory.Impl()->AgnCategory()), iCalSession.Impl().CollectionId());
+		CArrayFixSeg<TAgnEntryId>* entryId = new (ELeave) CArrayFixSeg<TAgnEntryId> (32);
+		CleanupStack::PushL(entryId);
+		GetFilteredEntryL(*entryId, aEntries, iCalSession.Impl());
+		CleanupStack::PopAndDestroy(entryId);
+		}
+	else
+		{
+		User::Leave(KErrLocked);	
+		}
+	}
+
+void CCalCategoryManagerImpl::DeleteCategoryL(const CCalCategory& aCategory, MCalProgressCallBack& aProgressCallBack)
+	{
+	iCalSession.Impl().AsyncTaskManager().StartCategoryTaskL(aProgressCallBack, CCalAsyncTaskManager::EDeleteCategory,aCategory);
+	}
+
+void CCalCategoryManagerImpl::GetFilteredEntryL(CArrayFixSeg<TAgnEntryId>& aEntryId, RPointerArray<CCalEntry>& aEntries, CCalSessionImpl& aCalSessionImpl)
+	{// Get the light entry by its entry id and fill in it into the array past in by the client
+	aCalSessionImpl.Server().FilterCategoryL(aEntryId, aCalSessionImpl.FileId());
+	TInt count=aEntryId.Count();
+	for (TInt ii=0;ii<count;++ii)
+		{
+		CAgnSimpleEntry* simpleEntry=aCalSessionImpl.Server().GetSimpleEntryL(aEntryId[ii], aCalSessionImpl.CollectionId());
+		if (simpleEntry)
+			{
+			TCleanSimpleEntry simpleEntryCleanupItem(*simpleEntry, aCalSessionImpl.Server().SimpleEntryAllocator());
+			CleanupStack::PushL(TCleanupItem(TCleanSimpleEntry::DestroySimpleEntry, &simpleEntryCleanupItem));
+			CCalLiteEntry* liteEntry = CCalLiteEntry::NewL(*simpleEntry, aCalSessionImpl.Server());
+			CleanupStack::Pop();
+			CleanupStack::PushL(liteEntry);
+			CCalEntryImpl* entryImpl = CCalEntryImpl::NewL(*liteEntry, aCalSessionImpl);
+			CleanupStack::Pop(liteEntry);
+			CleanupStack::PushL(entryImpl);
+			CCalEntry* entry=CCalEntry::NewL(entryImpl);
+			CleanupStack::Pop(entryImpl);
+			CleanupStack::PushL(entry);
+			aEntries.AppendL(entry);
+			CleanupStack::Pop(entry);
+			}		
+		}
+	}