diff -r f5050f1da672 -r 04becd199f91 javaextensions/pim/agnadapter/src.s60/cpimagnapptadapter.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/javaextensions/pim/agnadapter/src.s60/cpimagnapptadapter.cpp Tue Apr 27 16:30:29 2010 +0300 @@ -0,0 +1,217 @@ +/* +* Copyright (c) 2008 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: Converts PIM Event items and native calendar entries + * +*/ + + +// CLASS HEADER +#include "cpimagnapptadapter.h" + +// INTERNAL INCLUDES +#include "pimpanics.h" +#include "agneventsupport.h" +#include "mpimrepeatruledata.h" +#include "mpimitemdata.h" +#include "mpimeventitem.h" +#include "logger.h" + +// EXTERNAL INCLUDES +#include +#include +#include + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CPIMAgnApptAdapter* CPIMAgnApptAdapter::NewL( + java::util::FunctionServer* aFuncServer) +{ + JELOG2(EPim); + CPIMAgnApptAdapter* self = new(ELeave) CPIMAgnApptAdapter(aFuncServer); + CleanupStack::PushL(self); + CallMethodL(self, &CPIMAgnApptAdapter::ConstructL, self->iFuncServer); + CleanupStack::Pop(self); + return self; +} + +// destructor +CPIMAgnApptAdapter::~CPIMAgnApptAdapter() +{ +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::CreateItemToAgnL +// Creates a new Agenda Model Appt item from a PIM item data. +// Returns: A Appt item based on PIM item data. +// The ownership of the Appt item is transferred to the caller. +// ----------------------------------------------------------------------------- +// +CCalEntry* CPIMAgnApptAdapter::CreateItemToAgnL(const MPIMEventItem& aItem) +{ + JELOG2(EPim); + // Create new calendar entry + CCalEntry* entry = CreateCalendarEntryLC(CCalEntry::EAppt); + // Add default values to the item. The default values are used + // by the native calendar application and therefore needed to be added + AddDefaultValuesToEntryL(aItem, *entry); + // Convert fields from Java side to the native side + ConvertFieldsToAgnL(aItem, *entry); + // Convert repeat rule since appointments can have recurrence rules + if (aItem.IsRepeating()) + { + ConvertRepeatToAgnL(aItem, *entry); + } + + CleanupStack::Pop(entry); + return entry; +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::ReadAgnToItemL +// Reads an Agenda Model Appointment item and converts it to framework PIM item. +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::ReadAgnToItemL(MPIMEventItem& aItem, CCalEntry& aEntry) +{ + JELOG2(EPim); + ReadFieldsFromAgnL(aItem, aEntry, KPIMSupportedApptFields, + KPIMSupportedApptFieldsCount); + + TCalRRule tempRepeat; + if (aEntry.GetRRuleL(tempRepeat)) + { + ReadRepeatFromAgnL(aItem, aEntry); + aItem.GetRepeat()->BackupRepeatL(); + } +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::UpdateItemToAgnL +// Reads an Agenda Model Appt item and updates it based on the PIM item data. +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::UpdateItemToAgnL(const MPIMEventItem& aItem, // PIM Item Data + CCalEntry& aEntry) // Agenda Model entry +{ + JELOG2(EPim); + // Before updating values, empty the fields or set default values for the + // fields that PIM api supports + ClearPIMFieldsL(aEntry, KPIMSupportedApptFields, + KPIMSupportedApptFieldsCount); + + // Convert fields from Java side to the native side + ConvertFieldsToAgnL(aItem, aEntry); + // If there is a defined repeat rule, convert it also + if (aItem.IsRepeating()) + { + if (aItem.GetRepeat()->IsModified()) + { + ConvertRepeatToAgnL(aItem, aEntry); + } + } + else + { + // Clear the repeat, as it might have been removed. + aEntry.ClearRepeatingPropertiesL(); + } +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::CPIMAgnApptAdapter +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CPIMAgnApptAdapter::CPIMAgnApptAdapter(java::util::FunctionServer* aFuncServer) : + CPIMAgnEventAdapter(aFuncServer) +{ + JELOG2(EPim); +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::ReadStartFromAgnL +// Reads Agenda entry's start field and converts it into PIM Item field. +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::ReadStartFromAgnL(MPIMEventItem& aItem, + CCalEntry& aEntry) +{ + JELOG2(EPim); + TTime agnStartTime = aEntry.StartTimeL().TimeUtcL(); + if (agnStartTime != Time::NullTTime()) + { + TPIMFieldData fieldData(EPIMEventStart, KPIMAttrNone, agnStartTime); + aItem.ItemData().AddValueL(fieldData); + } +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::ReadEndFromAgnL +// Reads Agenda entry's end field and converts it into PIM Item field. +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::ReadEndFromAgnL(MPIMEventItem& aItem, + CCalEntry& aEntry) +{ + JELOG2(EPim); + TTime agnEndTime = aEntry.EndTimeL().TimeUtcL(); + if (agnEndTime != Time::NullTTime()) + { + TPIMFieldData fieldData(EPIMEventEnd, KPIMAttrNone, agnEndTime); + aItem.ItemData().AddValueL(fieldData); + } +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::AddDefaultValuesToEntryL +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::AddDefaultValuesToEntryL(const MPIMEventItem& aItem, + CCalEntry& aEntry) const +{ + JELOG2(EPim); + // Add common event default values to the native entry + CPIMAgnEventAdapter::AddDefaultValuesToEntryL(aItem, aEntry); + const MPIMItemData& data = aItem.ItemData(); + + // Set default start and end time if these are not present in the Java item + if (data.CountValues(EPIMEventStart) == 0 && data.CountValues(EPIMEventEnd) + == 0) + { + TCalTime defaultTime; + TTime currentTime; + // Get current time in universal time + currentTime.UniversalTime(); + defaultTime.SetTimeUtcL(currentTime); + aEntry.SetStartAndEndTimeL(defaultTime, defaultTime); + } +} + +// ----------------------------------------------------------------------------- +// CPIMAgnApptAdapter::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CPIMAgnApptAdapter::ConstructL() +{ + JELOG2(EPim); + CPIMAgnEventAdapter::ConstructL(); +} + +// End of file