calendarengines/versit2/src/ICalTodo.cpp
author Dario Sestito <darios@symbian.org>
Mon, 12 Jul 2010 17:26:07 +0100
branchRCL_3
changeset 52 e3c9f8706792
parent 0 f979ecb2b13e
permissions -rw-r--r--
Remerge caldav + fixes (i.e. bug 208, bug 1908, bug 2129, bug 2221, bug 2801)

/*
* Copyright (c) 2002-2004 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:   Holds the definition of CICalTodo.It deals with calendar entry of type ToDO.
*
*/



// Class includes.
#include "ICalTodo.h"	// CICalTodo

//debug
#include "calendarengines_debug.h"

// User includes.
#include "ICalKeyWords.h"			// Literals

/**
Static factory construction
@return A new CICalTodo
@internalTechnology
*/
CICalTodo* CICalTodo::NewLC(TICalMethod aMethod)
	{
	TRACE_ENTRY_POINT;
	
	CICalTodo* self = new (ELeave) CICalTodo;
	CleanupStack::PushL(self);
	self->ConstructL(aMethod);
	
	TRACE_EXIT_POINT;
	return self;
	}

/**
Destructor
@internalTechnology
*/
CICalTodo::~CICalTodo()
	{
	TRACE_ENTRY_POINT;
	TRACE_EXIT_POINT;
	}

/**
Constructor
@internalTechnology
*/
CICalTodo::CICalTodo()
	{
	TRACE_ENTRY_POINT;
	
	iComponentType = EICalTodo;
	
	TRACE_EXIT_POINT;
	}

/**
Internal construction
@internalTechnology
*/
void CICalTodo::ConstructL(TICalMethod aMethod)
	{
	TRACE_ENTRY_POINT;
	
	iMethod = aMethod;
	switch(iMethod)
		{
		case EMethodNone:
			iComponentMethodBitMask = EMaskTodoNone;
			break;
		case EMethodPublish:
			iComponentMethodBitMask = EMaskTodoPublish;
			break;
		case EMethodRequest:
			iComponentMethodBitMask = EMaskTodoRequest;
			break;
		case EMethodReply:
			iComponentMethodBitMask = EMaskTodoReply;
			break;
		case EMethodAdd:
			iComponentMethodBitMask = EMaskTodoAdd;
			break;
		case EMethodCancel:
			iComponentMethodBitMask = EMaskTodoCancel;
			break;
		case EMethodRefresh:
			iComponentMethodBitMask = EMaskTodoRefresh;
			break;
		case EMethodCounter:
			iComponentMethodBitMask = EMaskTodoCounter;
			break;
		case EMethodDeclineCounter:
			iComponentMethodBitMask = EMaskTodoDeclineCounter;
			break;
		}
	TRACE_EXIT_POINT;
	}
	
/**
Checks that the iCalendar specification allows this calendar component to
contain the property aName
@param aName the name of the property to validate
@return ETrue if the property is valid for this component, otherwise EFalse
@internalTechnology
*/
TBool CICalTodo::ValidatePropertyImpl(const TDesC& aName) const
	{
	TRACE_ENTRY_POINT;
	
	if ((aName.CompareF(KICalClass) == 0) || (aName.CompareF(KICalCompleted) == 0) ||
		(aName.CompareF(KICalCreated) == 0) || (aName.CompareF(KICalDescription) == 0) ||
		(aName.CompareF(KICalDtstamp) == 0) || (aName.CompareF(KICalDtstart) == 0) ||
		(aName.CompareF(KICalGeo) == 0) || (aName.CompareF(KICalLastmodified) == 0) ||
		(aName.CompareF(KICalLocation) == 0) || (aName.CompareF(KICalOrganizer) == 0) ||
		(aName.CompareF(KICalPercentcomplete) == 0) || (aName.CompareF(KICalPriority) == 0) ||
		(aName.CompareF(KICalRecurrenceId) == 0) || (aName.CompareF(KICalSequence) == 0) ||
		(aName.CompareF(KICalStatus) == 0) || (aName.CompareF(KICalSummary) == 0) ||
		(aName.CompareF(KICalUid) == 0) || (aName.CompareF(KICalUrl) == 0) ||
		(aName.CompareF(KICalDtend) == 0) || (aName.CompareF(KICalDuration) == 0))
		{
		//	0..1	CLASS
		//	0..1	COMPLETED
		//	0..1	CREATED
		//	0..1	DESCRIPTION
		//	0..1	DTSTAMP
		//	0..1	DTSTART
		//	0..1	GEO
		//	0..1	LAST-MOD
		//	0..1	LOCATION
		//	0..1	ORGANIZER
		//	0..1	PERCENT-COMPLETE
		//	0..1	PRIORITY
		//	0..1	RECURRENCE-ID
		//	0..1	SEQUENCE
		//	0..1	STATUS
		//	0..1	SUMMARY
		//	0..1	UID
		//	0..1	URL
		TRACE_EXIT_POINT;
		return (FindProperty(aName) == NULL);
		}
	// Either DUE or DURATION may exist but *not* both
	else if (aName.CompareF(KICalDue) == 0)
		{
		//	0..1	DUE
		if (FindProperty(aName) == NULL)
			{
			TRACE_EXIT_POINT;
			return (FindProperty(KICalDuration) == NULL);
			}
		}
		else if (aName.CompareF(KICalDuration) == 0)
		{
		//	0..1	DURATION
		if (FindProperty(aName) == NULL)
			{
			TRACE_EXIT_POINT;
			return (FindProperty(KICalDue) == NULL);
			}
		}
	else if ((aName.CompareF(KICalAttach) == 0) || (aName.CompareF(KICalAttendee) == 0) ||
		(aName.CompareF(KICalCategories) == 0) || (aName.CompareF(KICalComment) == 0) ||
		(aName.CompareF(KICalContact) == 0) || (aName.CompareF(KICalExdate) == 0) ||
		(aName.CompareF(KICalExrule) == 0) || (aName.CompareF(KICalRequeststatus) == 0) ||
		(aName.CompareF(KICalRelatedto) == 0) || (aName.CompareF(KICalResources) == 0) ||
		(aName.CompareF(KICalRdate) == 0) || (aName.CompareF(KICalRRule) == 0))
		{
		//	0..*	ATTACH
		//	0..*	ATTENDEE
		//	0..*	CATEGORIES
		//	0..*	COMMENT
		//	0..*	CONTACT
		//	0..*	EXDATE
		//	0..*	EXRULE
		//	0..*	REQUEST-STATUS
		//	0..*	RELATED-TO
		//	0..*	RESOURCES
		//	0..*	RDATE
		//	0..*	RRULE
		TRACE_EXIT_POINT;
		return ETrue;
		}

	if ((aName.Length() >= 2) && (aName.Left(2).CompareF(KICalXProperty) == 0))
		{
		//	0..*	X-[anything]
		TRACE_EXIT_POINT;
		return ETrue;
		}

	// If we got this far we didn't match any of the possible property names
	TRACE_EXIT_POINT;
	return EFalse;	
	}
	
/**
Checks that the iCalendar specification allows this calendar component to
contain a nested component of type aType.
@param aType the type of component to validate.
@return ETrue if the component is a valid child for this component, otherwise
EFalse.
@internalTechnology
*/
TBool CICalTodo::ValidateComponent(TICalComponentType aType) const
	{
	TRACE_ENTRY_POINT;
	TRACE_EXIT_POINT;
	// VTODO can only contain VALARMs.
	return (aType == EICalAlarm);
	}
	
// End of File