diff -r 48060abbbeaf -r b3cee849fa46 creator/src/creator_calendarelement.cpp --- a/creator/src/creator_calendarelement.cpp Thu Aug 19 09:55:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,594 +0,0 @@ -/* -* 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: -* -*/ - - -#include "creator_calendarelement.h" -#include "creator_traces.h" -#include "creator_calendar.h" - -using namespace creatorcalendar; - -CCreatorCalendarElement* CCreatorCalendarElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext ) - { - CCreatorCalendarElement* self = new (ELeave) CCreatorCalendarElement(aEngine); - CleanupStack::PushL(self); - self->ConstructL(aName, aContext); - CleanupStack::Pop(self); - return self; - } - -void CCreatorCalendarElement::FillEntryParamsL(TEntryType aType, const RPointerArray& fields, CCalenderInterimParameters* parameters) - { - if( parameters == 0 ) - return; - - TBool startResolved = EFalse; - TBool endResolved = EFalse; - - for( TInt i = 0; i < fields.Count(); ++i ) - { - TPtrC elemName = fields[i]->Name(); - TPtrC elemContent = fields[i]->Content(); - const CCreatorScriptAttribute* randomAttr = fields[i]->FindAttributeByName(KRandomLength); - - if( elemName == KSummary || elemName == KDescription ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - TPtrC reason; - if( aType == EAppointment ) - { - reason.Set(iEngine->RandomString (CCreatorEngine::EMeetingReason )); - } - else if( aType == EEvent ) - { - reason.Set(iEngine->RandomString(CCreatorEngine::EMemoText)); - } - else if( aType == EReminder ) - { - reason.Set(iEngine->RandomString(CCreatorEngine::EReminderText)); - } - else if( aType == EAnniversary ) - { - reason.Set(iEngine->RandomString(CCreatorEngine::EAnniversaryReason)); - } - else if( aType == ETodo ) - { - reason.Set(iEngine->RandomString(CCreatorEngine::EToDoText)); - } - - if( elemName == KDescription ) - { - delete parameters->iDescription; - parameters->iDescription = 0; - parameters->iDescription = HBufC::NewL(reason.Length()); - parameters->iDescription->Des().Copy(reason); - } - else if(elemName == KSummary) - { - delete parameters->iSummary; - parameters->iSummary = 0; - parameters->iSummary = HBufC::NewL(reason.Length()); - parameters->iSummary->Des().Copy(reason); - } - } - else if( elemName == KDescription ) - { - delete parameters->iDescription; - parameters->iDescription = 0; - parameters->iDescription = HBufC::NewL(elemContent.Length()); - parameters->iDescription->Des().Copy(elemContent); - } - else if( elemName == KSummary) - { - delete parameters->iSummary; - parameters->iSummary = 0; - parameters->iSummary = HBufC::NewL(elemContent.Length()); - parameters->iSummary->Des().Copy(elemContent); - } - } - else if( elemName == KLocation ) - { - delete parameters->iLocation; - parameters->iLocation = 0; - - if( randomAttr || elemContent.Length() == 0 ) - { - TPtrC reason = iEngine->RandomString (CCreatorEngine::EMeetingPlace ); - parameters->iLocation = HBufC::NewL(reason.Length()); - parameters->iLocation->Des().Copy(reason); - } - else - { - parameters->iLocation = HBufC::NewL(elemContent.Length()); - parameters->iLocation->Des().Copy(elemContent); - } - } - else if( elemName == KStarttime ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - // Random start time used. If end time is already resolved, let's use that one for the basis. - if( endResolved ) - { - parameters->iStartTime = iEngine->RandomTime(parameters->iEndTime, CCreatorEngine::EDatePast); - } - else - { - // Past or future: - CCreatorEngine::TRandomDateType pastOrfuture = - (CCreatorEngine::TRandomDateType) iEngine->RandomNumber((TInt) CCreatorEngine::EDatePast, - (TInt) CCreatorEngine::EDateFuture); - - parameters->iStartTime = - iEngine->RandomTime(iEngine->RandomDate(pastOrfuture), pastOrfuture); - } - } - else - { - parameters->iStartTime = ConvertToDateTimeL(elemContent); - } - startResolved = ETrue; - } - else if( elemName == KEndtime ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - // Random end time used. If start time is already resolved, let's use that one. - if( startResolved ) - { - parameters->iEndTime = iEngine->RandomTime(parameters->iStartTime, CCreatorEngine::EDateFuture); - } - else - { - // Past or future: - CCreatorEngine::TRandomDateType pastOrfuture = - (CCreatorEngine::TRandomDateType) iEngine->RandomNumber((TInt) CCreatorEngine::EDatePast, - (TInt) CCreatorEngine::EDateFuture); - - parameters->iEndTime = - iEngine->RandomTime(iEngine->RandomDate(pastOrfuture), pastOrfuture); - } - } - else - { - parameters->iEndTime = ConvertToDateTimeL(elemContent); - } - if( aType == ETodo ) - { - parameters->iTodoDueTime = parameters->iEndTime; - } - } - else if( elemName == KRecurrentFreq ) - { - TInt randomFreq = 0; - if( randomAttr || elemContent.Length() == 0 ) - { - randomFreq = iEngine->RandomNumber(1, 4); - } - if(randomFreq == 1 || CompareIgnoreCase(elemContent, KDaily) == 0 ) - parameters->iRecurrentFrequency = TCalRRule::EDaily; - else if( randomFreq == 2 || CompareIgnoreCase(elemContent, KWeekly) == 0 ) - parameters->iRecurrentFrequency = TCalRRule::EWeekly; - else if( randomFreq == 3 || CompareIgnoreCase(elemContent, KMonthly) == 0 ) - parameters->iRecurrentFrequency = TCalRRule::EMonthly; - else if( randomFreq == 4 || CompareIgnoreCase(elemContent, KYearly) == 0 ) - parameters->iRecurrentFrequency = TCalRRule::EYearly; - else - parameters->iRecurrentFrequency = TCalRRule::EInvalid; - } - else if( elemName == KRecurrentInterval ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - parameters->iRecurrentInterval = iEngine->RandomNumber(1,7); - } - else - { - parameters->iRecurrentInterval = ConvertStrToIntL(elemContent); - } - } - else if( elemName == KRecurrentFrom ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - if( startResolved ) - { - // Let's use the start time if it's resolved. - parameters->iRecurrentStartTime = parameters->iStartTime; - } - else - { - parameters->iRecurrentStartTime = iEngine->RandomDate(CCreatorEngine::EDateFuture); - } - } - else - { - parameters->iRecurrentStartTime = ConvertToDateTimeL(elemContent); - } - } - else if( elemName == KRecurrentTo ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - parameters->iRepeatingCount = iEngine->RandomNumber(1, 6); - //parameters->iRecurrentEndTime = iEngine->RandomDate(CCreatorEngine::EDateFuture); - } - else - { - parameters->iRecurrentEndTime = ConvertToDateTimeL(elemContent); - } - } - else if( elemName == KRepeatingCount ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - parameters->iRepeatingCount = iEngine->RandomNumber(1, 52); - } - else - { - parameters->iRepeatingCount = ConvertStrToIntL(elemContent); - } - } - else if( elemName == KAlarmtime ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - parameters->iUseRandomAlarmTime = ETrue; - } - else - { - parameters->iAlarmTime = ConvertToDateTimeL(elemContent); - } - } - else if( elemName == KOrganizername ) - { - delete parameters->iOrganizerName; - parameters->iOrganizerName = 0; - if( randomAttr || elemContent.Length() == 0 ) - { - TPtrC name = iEngine->RandomString (CCreatorEngine::EFirstName ); - parameters->iOrganizerName = HBufC::NewL(name.Length()); - parameters->iOrganizerName->Des().Copy(name); - } - else - { - parameters->iOrganizerName = HBufC::NewL(elemContent.Length()); - parameters->iOrganizerName->Des().Copy(elemContent); - } - } - else if( elemName == KOrganizeremail ) - { - delete parameters->iOrganizerEmail; - parameters->iOrganizerEmail = 0; - if( randomAttr || elemContent.Length() == 0 ) - { - TDesC* email = iEngine->CreateEmailAddressLC(); - parameters->iOrganizerEmail = (HBufC*) email; - CleanupStack::Pop(); // email - } - else - { - parameters->iOrganizerEmail = HBufC::NewL(elemContent.Length()); - parameters->iOrganizerEmail->Des().Copy(elemContent); - } - } - else if( elemName == KStatus ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - if( aType == ETodo ) - { - parameters->iStatus = (CCalEntry::TStatus) iEngine->RandomNumber(CCalEntry::ETodoNeedsAction, CCalEntry::ETodoInProcess); - } - else - { - parameters->iStatus = (CCalEntry::TStatus) iEngine->RandomNumber(CCalEntry::ETentative, CCalEntry::ECancelled); - } - } - else if( CompareIgnoreCase(elemContent, KCalStatusTentative) == 0 ) - { - parameters->iStatus = CCalEntry::ETentative; - } - else if( CompareIgnoreCase(elemContent, KCalStatusConfirmed) == 0 ) - { - parameters->iStatus = CCalEntry::EConfirmed; - } - else if( CompareIgnoreCase(elemContent, KCalStatusCancelled) == 0 ) - { - parameters->iStatus = CCalEntry::ECancelled; - } - else if( CompareIgnoreCase(elemContent, KCalStatusNeedsAction) == 0 ) - { - parameters->iStatus = CCalEntry::ETodoNeedsAction; - } - else if( CompareIgnoreCase(elemContent, KCalStatusCompleted) == 0 ) - { - parameters->iStatus = CCalEntry::ETodoCompleted; - } - else if( CompareIgnoreCase(elemContent, KCalStatusInProcess) == 0 ) - { - parameters->iStatus = CCalEntry::ETodoInProcess; - } - else - { - parameters->iStatus = CCalEntry::ENullStatus; - } - } - else if( elemName == KPriority ) - { - if( randomAttr || elemContent.Length() == 0 ) - { - parameters->iTodoPriority = iEngine->RandomNumber(1,3); - } - else if( CompareIgnoreCase(elemContent, KPriorityHigh) == 0) - { - parameters->iTodoPriority = 1; - } - else if( CompareIgnoreCase(elemContent, KPriorityMedium) == 0) - { - parameters->iTodoPriority = 2; - } - else if( CompareIgnoreCase(elemContent, KPriorityLow) == 0 ) - { - parameters->iTodoPriority = 3; - } - else - { - parameters->iTodoPriority = ConvertStrToIntL(elemContent); - } - } - else if( elemName == KAttendees ) - { - const RPointerArray& attendeesSubElems = fields[i]->SubElements(); - for( TInt j = 0; j < attendeesSubElems.Count(); ++j ) - { - TPtrC eName = attendeesSubElems[j]->Name(); - TPtrC eContent = attendeesSubElems[j]->Content(); - if( eName == KContactSetRef ) - { - AppendContactSetReferenceL(*attendeesSubElems[j], parameters->iAttendeeLinkIds); - } - else if( eName == KAttendee ) - { - CCreatorCalenderAttendee* calAtt = CCreatorCalenderAttendee::NewL(); - CleanupStack::PushL(calAtt); - const RPointerArray& attendeeFields = attendeesSubElems[j]->SubElements(); - // Make sure that at least email is given: - if(attendeeFields.Count() == 0 ) - { - CCreatorScriptElement* emailField = CCreatorScriptElement::NewL(iEngine, KEmail ); - CleanupStack::PushL(emailField); - fields[i]->SubElements().AppendL(emailField); - CleanupStack::Pop(); // emailField - } - for( TInt k = 0; k < attendeeFields.Count(); ++k ) - { - const CCreatorScriptAttribute* randomAttr = attendeeFields[k]->FindAttributeByName(KRandomLength); - TPtrC attElemName = attendeeFields[k]->Name(); - TPtrC attElemCont = attendeeFields[k]->Content(); - if( attElemName == KCommonname ) - { - if( randomAttr || attElemCont.Length() == 0) - { - // Random data: - calAtt->SetCommonNameL(iEngine->RandomString(CCreatorEngine::EFirstName)); - } - else - { - calAtt->SetCommonNameL(attElemCont); - } - } - else if( attElemName == KEmail ) - { - if( randomAttr || attElemCont.Length() == 0) - { - // Random data: - TDesC* email = iEngine->CreateEmailAddressLC(); - calAtt->SetEmailAddressL(*email); - CleanupStack::PopAndDestroy(); // email - } - else - { - calAtt->SetEmailAddressL(attElemCont); - } - } - else if( attElemName == KRole ) - { - if( randomAttr || attElemCont.Length() == 0) - { - // Random role: - CCalAttendee::TCalRole randomRole = - (CCalAttendee::TCalRole) iEngine->RandomNumber( - (TInt) CCalAttendee::EReqParticipant, - (TInt) CCalAttendee::EChair); - calAtt->SetRole(randomRole); - } - else if( CompareIgnoreCase(attElemCont, KRoleRequired) == 0 ) - { - calAtt->SetRole(CCalAttendee::EReqParticipant); - } - else if( CompareIgnoreCase(attElemCont, KRoleOptional) == 0 ) - { - calAtt->SetRole(CCalAttendee::EOptParticipant); - } - else if( CompareIgnoreCase(attElemCont, KRoleNonPart) == 0 ) - { - calAtt->SetRole(CCalAttendee::ENonParticipant); - } - else if( CompareIgnoreCase(attElemCont, KRoleChair) == 0 ) - { - calAtt->SetRole(CCalAttendee::EChair); - } - } - else if( attElemName == KStatus ) - { - if( randomAttr || attElemCont.Length() == 0) - { - // Random role: - CCalAttendee::TCalStatus randomStatus = - (CCalAttendee::TCalStatus) iEngine->RandomNumber( - (TInt) CCalAttendee::ENeedsAction, - (TInt) CCalAttendee::EInProcess); - calAtt->SetStatus(randomStatus); - } - else if( CompareIgnoreCase(attElemCont, KStatusNeedsAction) == 0 ) - { - calAtt->SetStatus(CCalAttendee::ENeedsAction); - } - else if( CompareIgnoreCase(attElemCont, KStatusAccepted) == 0 ) - { - calAtt->SetStatus(CCalAttendee::EAccepted); - } - else if( CompareIgnoreCase(attElemCont, KStatusTentative) == 0 ) - { - calAtt->SetStatus(CCalAttendee::ETentative); - } - else if( CompareIgnoreCase(attElemCont, KStatusConfirmed) == 0 ) - { - calAtt->SetStatus(CCalAttendee::EConfirmed); - } - else if( CompareIgnoreCase(attElemCont, KStatusDeclined) == 0 ) - { - calAtt->SetStatus(CCalAttendee::EDeclined); - } - else if( CompareIgnoreCase(attElemCont, KStatusCompleted) == 0 ) - { - calAtt->SetStatus(CCalAttendee::ECompleted); - } - else if( CompareIgnoreCase(attElemCont, KStatusDelegated) == 0 ) - { - calAtt->SetStatus(CCalAttendee::EDelegated); - } - else if( CompareIgnoreCase(attElemCont, KStatusInProcess) == 0 ) - { - calAtt->SetStatus(CCalAttendee::EInProcess); - } - } - } - parameters->iAttendees.AppendL(calAtt); - CleanupStack::Pop(); // calAtt - } - } - } - } - } - -void CCreatorCalendarElement::ExecuteCommandL() - { - LOGSTRING("Creator: CCreatorCalendarElement::ExecuteCommandL"); - // Amount of calendar entries: - const CCreatorScriptAttribute* calEntryAmountAttr = this->FindAttributeByName(KAmount); - const CCreatorScriptAttribute* calEntryTypeAttr = this->FindAttributeByName(KType); - TInt entryAmount = 1; - if( calEntryAmountAttr ) - { - entryAmount = ConvertStrToIntL(calEntryAmountAttr->Value()); - } - if( calEntryTypeAttr == 0 ) - { - LOGSTRING("ERROR in CCreatorCalendarElement::ExecuteCommandL: Type attribute is missing."); - User::Leave(KErrGeneral); // type is required attribute - } - - // Find fields element: - CCreatorScriptElement* fieldsElement = FindSubElement(KFields); - - for( TInt cI = 0; cI < entryAmount; ++cI ) - { - CCalenderInterimParameters* param = new (ELeave) CCalenderInterimParameters; - CleanupStack::PushL(param); - if( CompareIgnoreCase(calEntryTypeAttr->Value(), KCalTypeAppointment) == 0 ) - { - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - FillEntryParamsL(EAppointment, fieldsElement->SubElements(), param); - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryAppointments, param); - } - else - { - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryAppointments, 0, entryAmount); - CleanupStack::PopAndDestroy(param); - break; // We can step out from the for-loop, because the amount is given to engine. - } - } - else if( CompareIgnoreCase(calEntryTypeAttr->Value(), KCalTypeEvent ) == 0 ) - { - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - FillEntryParamsL(EEvent, fieldsElement->SubElements(), param); - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryEvents, param); - } - else - { - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryEvents, 0, entryAmount); - CleanupStack::PopAndDestroy(param); - break; // We can step out from the for-loop, because the amount is given to engine. - } - } - else if( CompareIgnoreCase(calEntryTypeAttr->Value(), KCalTypeReminder ) == 0 ) - { - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - FillEntryParamsL(EReminder, fieldsElement->SubElements(), param); - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryReminders, param); - } - else - { - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryReminders, 0, entryAmount); - CleanupStack::PopAndDestroy(param); - break; // We can step out from the for-loop, because the amount is given to engine. - } - } - else if( CompareIgnoreCase(calEntryTypeAttr->Value(), KCalTypeAnniversary ) == 0 ) - { - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - FillEntryParamsL(EAnniversary, fieldsElement->SubElements(), param); - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryAnniversaries, param); - } - else - { - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryAnniversaries, 0, entryAmount); - CleanupStack::PopAndDestroy(param); - break; // We can step out from the for-loop, because the amount is given to engine. - } - } - else if( CompareIgnoreCase(calEntryTypeAttr->Value(), KCalTypeTodo ) == 0 ) - { - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - FillEntryParamsL(ETodo, fieldsElement->SubElements(), param); - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryToDos, param); - } - else - { - iEngine->AppendToCommandArrayL(ECmdCreateCalendarEntryToDos, 0, entryAmount); - CleanupStack::PopAndDestroy(param); - break; // We can step out from the for-loop, because the amount is given to engine. - } - } - CleanupStack::Pop(); // param - } - } - -CCreatorCalendarElement::CCreatorCalendarElement(CCreatorEngine* aEngine) -: -CCreatorScriptElement(aEngine) - { - iIsCommandElement = ETrue; - }