diff -r 48060abbbeaf -r b3cee849fa46 creator/src/creator_messageelement.cpp --- a/creator/src/creator_messageelement.cpp Thu Aug 19 09:55:38 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,474 +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_messageelement.h" -#include "creator_traces.h" -#include "creator_message.h" - -using namespace creatormsg; - -/* - * - */ -CCreatorMessageElement* CCreatorMessageElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext ) - { - CCreatorMessageElement* self = new (ELeave) CCreatorMessageElement(aEngine); - CleanupStack::PushL(self); - self->ConstructL(aName, aContext); - CleanupStack::Pop(self); - return self; - } -/* - * - */ -CCreatorMessageElement::CCreatorMessageElement(CCreatorEngine* aEngine) -: -CCreatorScriptElement(aEngine) - { - iIsCommandElement = ETrue; - } -/* - * Sets message type - */ -void CCreatorMessageElement::SetMessageTypeL(CMessagesParameters& aParameters, const TDesC& aMsgTypeStr ) const - { - if( CompareIgnoreCase(aMsgTypeStr, KSms) == 0 ) - { - aParameters.iMessageType = ESMS; - } - else if( CompareIgnoreCase(aMsgTypeStr, KMms) == 0 ) - { - aParameters.iMessageType = EMMS; - } - else if( CompareIgnoreCase(aMsgTypeStr, KAms) == 0 ) - { - aParameters.iMessageType = EAMS; - } - else if( CompareIgnoreCase(aMsgTypeStr, KEmail) == 0 ) - { - aParameters.iMessageType = EEmail; - } - else if( CompareIgnoreCase(aMsgTypeStr, KSmart) == 0 ) - { - aParameters.iMessageType = ESmartMessage; - } - else if( CompareIgnoreCase(aMsgTypeStr, KIr) == 0 ) - { - aParameters.iMessageType = EIrMessage; - } - else if( CompareIgnoreCase(aMsgTypeStr, KBt) == 0 ) - { - aParameters.iMessageType = EBTMessage; - } - else - { - LOGSTRING2("ERROR in CCreatorMessageElement::SetMessageTypeL: Unknown message type: %S", &aMsgTypeStr); - User::Leave(KErrGeneral); - } - } -/* - * Returns maximum length of the body text, when randomlength=max is used. - */ -TInt CCreatorMessageElement::GetMaxBodyLength( const TDesC& aMsgType ) const - { - TInt len = 0; - if( CompareIgnoreCase(aMsgType, KSms) == 0 ) - { - len = 160; - } - else if( CompareIgnoreCase(aMsgType, KMms) == 0 ) - { - len = 160; - } - else if( CompareIgnoreCase(aMsgType, KEmail) == 0 ) - { - len = 1024; - } - else - { - len = KUndef; - } - return len; - } -/* - * Returns random body text length - */ -TInt CCreatorMessageElement::GetRandomBodyLengthL(const TDesC& aRandomLenStr, const TDesC& aMsgType ) const - { - TInt len = 0; - if( aRandomLenStr == KMax ) - { - len = GetMaxBodyLength(aMsgType); - } - else if( aRandomLenStr == KDefault ) - { - len = KUndef; - } - else - { - len = ConvertStrToIntL(aRandomLenStr); - } - return len; - } - -/* - * Creates random message address (To/From) - * Returns phone number for SMS, MMS, AMS and Smart messages. - * Email address for others - */ -HBufC* CCreatorMessageElement::CreateMessageAddressLC(const TDesC& msgType) - { - HBufC* toAddr; - if( CompareIgnoreCase(msgType, KSms) == 0 || - CompareIgnoreCase(msgType, KMms) == 0 || - CompareIgnoreCase(msgType, KAms) == 0 || - CompareIgnoreCase(msgType, KSmart) == 0) - { - TPtrC temp = iEngine->RandomString(CCreatorEngine::EPhoneNumber); - toAddr = HBufC::NewL(temp.Length()); - CleanupStack::PushL(toAddr); - toAddr->Des().Copy(temp); - } - else - { - toAddr = iEngine->CreateEmailAddressLC(); - } - return toAddr; - } - -/* - * - */ -void CCreatorMessageElement::ExecuteCommandL() - { - LOGSTRING("Creator: CCreatorMessageElement::ExecuteCommandL"); - - // Find out the message type: - const CCreatorScriptAttribute* msgTypeAttr = this->FindAttributeByName(KType); - TPtrC msgType; - if( msgTypeAttr ) - { - msgType.Set(msgTypeAttr->Value()); - } - else - { - LOGSTRING("ERROR in CCreatorMessageElement::ExecuteCommandL: Type attribute is missing."); - User::Leave(KErrGeneral); // type is required attribute - } - - // Find out the amount of calendar entries: - const CCreatorScriptAttribute* msgAmountAttr = this->FindAttributeByName(KAmount); - TInt msgAmount = 1; - if( msgAmountAttr ) - { - msgAmount = ConvertStrToIntL(msgAmountAttr->Value()); - } - - // Get 'fields' element - CCreatorScriptElement* fieldsElement = FindSubElement(KFields); - if( fieldsElement && fieldsElement->SubElements().Count() > 0 ) - { - // Get sub-elements (i.e the message field elements) - const RPointerArray& fields = fieldsElement->SubElements(); - - // Create message entries, the amount of entries is defined by msgAmount: - for( TInt cI = 0; cI < msgAmount; ++cI ) - { - CMessagesParameters* param = new (ELeave) CMessagesParameters; - CleanupStack::PushL(param); - - // Message type: - if( msgTypeAttr ) - { - SetMessageTypeL(*param, msgTypeAttr->Value()); - } - - // Loop all the message field elements: - for( TInt i = 0; i < fields.Count(); ++i ) - { - CCreatorScriptElement* field = fields[i]; - TPtrC elemName = field->Name(); - TPtrC elemContent = field->Content(); - const RPointerArray& contactReferences = field->SubElements(); - const CCreatorScriptAttribute* randomAttr = field->FindAttributeByName(KRandomLength); - const CCreatorScriptAttribute* amountAttr = field->FindAttributeByName(KAmount); - const CCreatorScriptAttribute* increaseAttr = field->FindAttributeByName(KIncrease); - TBool increase( EFalse ); - if ( increaseAttr ) - { - increase = ConvertStrToBooleanL( increaseAttr->Value() ); - } - TInt fieldAmount = 1; - if( amountAttr ) - { - fieldAmount = ConvertStrToIntL(amountAttr->Value()); - } - - if( elemName == KTo ) - { - // Recipient ('to'-field) - for( TInt amountIndex = 0; amountIndex < fieldAmount; ++amountIndex ) - { - if( (randomAttr || elemContent.Length() == 0 ) && contactReferences.Count() == 0 ) - { - // Random content - HBufC* toAddr = CreateMessageAddressLC(msgType); - if( toAddr ) - { - param->iRecipientAddressArray.AppendL(toAddr); - CleanupStack::Pop(); // toAddr - } - } - else - { - if( elemContent.Length() > 0 && contactReferences.Count() == 0) - { - // Explicit recipient given - HBufC* recipient = HBufC::NewL( elemContent.Length() + 3 ); - CleanupStack::PushL(recipient); - if ( increase ) - { - IncreasePhoneNumL( elemContent, cI, recipient ); - } - else - { - recipient->Des().Copy(elemContent); - } - param->iRecipientAddressArray.AppendL(recipient); - CleanupStack::Pop(); // recipient - } - else - { - // Recipients specified with contact-set-references (if any) - for( TInt csI = 0; csI < contactReferences.Count(); ++csI ) - { - CCreatorScriptElement* contactSetRef = contactReferences[csI]; - AppendContactSetReferenceL(*contactSetRef, param->iRecipientLinkIds); - } - } - } - } - } - else if( elemName == KFrom ) - { - // Sender ('from'-field) - // Amount attribute for sender is ignored, because there can be only one sender - delete param->iSenderAddress; - param->iSenderAddress = 0; - if( (randomAttr || elemContent.Length() == 0 ) && contactReferences.Count() == 0 ) - { - // Get random address - param->iSenderAddress = CreateMessageAddressLC(msgType); - CleanupStack::Pop(); // param->iSenderAddress - } - else - { - if( elemContent.Length() > 0 && contactReferences.Count() == 0) - { - // Explicit sender address given - param->iSenderAddress = HBufC::NewL(elemContent.Length()); - if ( increase ) - { - IncreasePhoneNumL( elemContent, cI, param->iSenderAddress ); - } - else - { - param->iSenderAddress->Des().Copy(elemContent); - } - } - else - { - // Senders specified with contact-set-references (if any) - for( TInt csI = 0; csI < contactReferences.Count(); ++csI ) - { - CCreatorScriptElement* contactSetRef = contactReferences[csI]; - AppendContactSetReferenceL(*contactSetRef, param->iSenderLinkIds); - } - } - } - } - else if( elemName == KFolder ) - { - // Folder type - if( CompareIgnoreCase(elemContent, KSent) == 0 ) - { - param->iFolderType = ESent; - } - else if( CompareIgnoreCase(elemContent, KInbox) == 0 ) - { - param->iFolderType = EInbox; - } - else if( CompareIgnoreCase(elemContent, KOutbox) == 0 ) - { - param->iFolderType = EOutbox; - } - else if( CompareIgnoreCase(elemContent, KDraft) == 0 ) - { - param->iFolderType = EDrafts; - } - } - else if( elemName == KSubject ) - { - // Message subject - delete param->iMessageSubject; - param->iMessageSubject = 0; - - if( randomAttr || elemContent.Length() == 0 ) - { - // Random data should be used - TPtrC temp = iEngine->RandomString(CCreatorEngine::EMessageSubject); - param->iMessageSubject = HBufC::NewL(temp.Length()); - param->iMessageSubject->Des().Copy(temp); - } - else - { - param->iMessageSubject = HBufC::NewL(elemContent.Length()); - param->iMessageSubject->Des().Copy(elemContent); - } - } - else if( elemName == KText ) - { - // Body text - delete param->iMessageBodyText; - param->iMessageBodyText = 0; - - if( randomAttr || elemContent.Length() == 0 ) - { - // Put random text: - if( randomAttr && randomAttr->Value() != KDefault ) - { - // Get the random length - TInt len = GetRandomBodyLengthL(randomAttr->Value(), msgTypeAttr->Value()); - if( len != KUndef ) - { - param->iMessageBodyText = iEngine->CreateRandomStringLC(len); - CleanupStack::Pop(); // param->iMessageBodyText - } - } - else - { - // Use default random data - TPtrC temp = iEngine->RandomString(CCreatorEngine::EMessageText); - param->iMessageBodyText = HBufC::NewL(temp.Length()); - param->iMessageBodyText->Des().Copy(temp); - } - } - else - { - param->iMessageBodyText = HBufC::NewL(elemContent.Length()); - param->iMessageBodyText->Des().Copy(elemContent); - } - } - else if( elemName == KAttachmentId ) - { - // Attachment file id - for( TInt amountIndex = 0; amountIndex < fieldAmount; ++amountIndex ) - { - if( randomAttr || elemContent.Length() == 0) - { - //When type is AMS, attachement will be audio - if(param->iMessageType == EAMS) - { - param->iAttachments->AppendL(CCreatorEngine::EMP3_250kB); - } - //Otherwise attachement can be any file - else - { - //EJPEG_25kB is first (0) in the enum and LAST_FILE_ID is last in the enum, so real last item id is one before LAST_FILE_ID - param->iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID-1) ); - } - } - else - { - //When user has been set attechment by it self, we trust user selection (not validating value, e.g. if message is SMS and there is attachement) - TInt id = iEngine->GetAttachmentIdL(elemContent); - if( id != KUndef ) - { - param->iAttachments->AppendL( id ); - } - } - } - } - // Attachment file path handling - //E.g. C:\data\others\DOC-20kB.doc - else if( elemName == KAttachmentPath ) - { - // Attachment file id - for( TInt amountIndex = 0; amountIndex < fieldAmount; ++amountIndex ) - { - //Path is random, getting one of the files (not even using path attribute, but id with random) - if( randomAttr || elemContent.Length() == 0) - { - //EJPEG_25kB is first (0) in the enum and LAST_FILE_ID is last in the enum, so real last item id is one before LAST_FILE_ID - param->iAttachments->AppendL( iEngine->RandomNumber(CCreatorEngine::EJPEG_25kB, CCreatorEngine::LAST_FILE_ID -1) ); - } - //Otherwise adding attachement path as it is to paths. - else - { - //Adding Attachement file path - HBufC* elemData = elemContent.AllocLC(); - param->iAttachmentPaths.AppendL( elemData ); - CleanupStack::Pop(elemData); - } - } - } - else if ( elemName == KStatus ) - { - if( CompareIgnoreCase( elemContent, KNew ) == 0 ) - { - param->iCreateAsUnread = ETrue; - } - else if( CompareIgnoreCase( elemContent, KRead ) == 0 ) - { - param->iCreateAsUnread = EFalse; - } - } - } - iEngine->AppendToCommandArrayL(ECmdCreateMessagingEntryMessagesViaScript, param); - CleanupStack::Pop(); // param - } - } - else - { - for( TInt i = 0; i < msgAmount; ++i ) - { - TInt randMsg = 0; - if( msgType == KSms ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntrySMSInbox, ECmdCreateRandomEntrySMSSent); - else if( msgType == KMms ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryMMSInbox, ECmdCreateRandomEntryMMSSent); - else if( msgType == KAms ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryAMSInbox, ECmdCreateRandomEntryAMSSent); - else if( msgType == KEmail ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryEmailInbox, ECmdCreateRandomEntryEmailSent); - else if( msgType == KSmart ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryBIOInbox, ECmdCreateRandomEntryBIOSent); - else if( msgType == KBt ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryBTInbox, ECmdCreateRandomEntryBTSent); - else if( msgType == KIr ) - randMsg = iEngine->RandomNumber(ECmdCreateRandomEntryIRInbox, ECmdCreateRandomEntryIRSent); - - if( randMsg > 0 ) - { - iEngine->AppendToCommandArrayL(randMsg, 0, 1); - } - } - } - } - -// End of file