creator/src/creator_mailboxelement.cpp
branchRCL_3
changeset 22 fad26422216a
parent 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/src/creator_mailboxelement.cpp	Wed Sep 01 12:30:35 2010 +0100
@@ -0,0 +1,495 @@
+/*
+* 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_mailboxelement.h"
+#include "creator_traces.h"
+#include "creator_mailbox.h"
+
+using namespace creatormailbox;
+
+/*
+ * 
+ */
+CCreatorMailboxElement* CCreatorMailboxElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext )
+    {
+    CCreatorMailboxElement* self = new (ELeave) CCreatorMailboxElement(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop(self);
+    return self;
+    }
+/*
+ * 
+ */
+CCreatorMailboxElement::CCreatorMailboxElement(CCreatorEngine* aEngine) 
+: 
+CCreatorScriptElement(aEngine)
+    {
+    iIsCommandElement = ETrue;
+    }
+
+TBool CCreatorMailboxElement::SetIntegerParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom )
+    {    
+    _LIT( KAll, "all");
+    
+    if( aElemName == Kincomingport )
+        {
+        if( aSetRandom )
+            param->iIncomingPort = iEngine->RandomNumber(25, 500);
+        else        
+            param->iIncomingPort = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Kattachmentsizelimit )
+        {
+        if( aSetRandom )
+            param->iAttachmentSizeLimit = iEngine->RandomNumber(1, KMaxTInt);
+        else
+            param->iAttachmentSizeLimit = ConvertStrToIntL(aElemContent);
+        }        
+    else if( aElemName == Kbodytextsizelimit )
+        {
+        if( aSetRandom )
+            param->iBodyTextSizeLimit = iEngine->RandomNumber(1, KMaxTInt);
+        else
+            param->iBodyTextSizeLimit = ConvertStrToIntL(aElemContent);
+        }     
+    else if( aElemName == Kattachmentfetchsize )
+        {
+        if( aSetRandom )
+            param->iAttachmentFetchSize = iEngine->RandomNumber(1, 40960);
+        else            
+            param->iAttachmentFetchSize = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Kimapidletimeout )
+        {
+        if( aSetRandom )
+            param->iImapIdleTimeout = iEngine->RandomNumber(10, 2000);
+        else
+            param->iImapIdleTimeout = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Kmaxemailsize )
+        {
+        if( aSetRandom )
+            param->iMaxEmailSize =  iEngine->RandomNumber(1024, KMaxTInt);
+        else
+            param->iMaxEmailSize = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Ksyncrate )
+        {
+        if( aSetRandom )
+            param->iSyncRate = iEngine->RandomNumber(10, 500);
+        else
+            param->iSyncRate = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Kinboxsynclimit )
+        {
+        if( aSetRandom )
+            param->iInboxSyncLimit = iEngine->RandomNumber(-1, 256);
+        else if( CompareIgnoreCase(aElemContent, KAll) == 0 )
+            param->iInboxSyncLimit = -1;
+        else
+            param->iInboxSyncLimit = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Kmailboxsynclimit )
+        {
+        if( aSetRandom )
+            param->iMailboxSyncLimit = iEngine->RandomNumber(-1, 256);
+        else if( CompareIgnoreCase(aElemContent, KAll) == 0 )
+            param->iMailboxSyncLimit = -1;
+        else
+            param->iMailboxSyncLimit = ConvertStrToIntL(aElemContent);
+        }        
+    else if( aElemName == Koutgoingport )
+        {
+        if( aSetRandom )
+            param->iOutgoingPort = KDefaultSmtpPort;
+        else
+            param->iOutgoingPort = ConvertStrToIntL(aElemContent);
+        }
+    else if( aElemName == Ktoccincludelimit )
+        {
+        if( aSetRandom )
+            param->iToCCIncludeLimit = iEngine->RandomNumber(0, 30);
+        else
+            param->iToCCIncludeLimit = ConvertStrToIntL(aElemContent);
+        }
+    else
+        return EFalse;
+    
+    return ETrue;
+    }
+
+TBool CCreatorMailboxElement::GetBooleanValueL(const TDesC& aElemContent, TBool aSetRandom)
+    {
+    if( aSetRandom )
+        return iEngine->RandomNumber(0,1) == 1;
+    
+    return ConvertStrToBooleanL(aElemContent);
+    }
+
+TBool CCreatorMailboxElement::SetBooleanParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom )
+    {  
+    TBool val = GetBooleanValueL(aElemContent, aSetRandom);
+    if( aElemName == Kincomingsslwrapper )
+        param->iIncomingSSLWrapper = val;
+    else if( aElemName == Kincomingsecuresockets )
+        param->iIncomingSecureSockets = val;
+    else if( aElemName == Kacknowledgereceipts )
+        param->iAcknowledgeReceipts = val;
+    else if( aElemName == Kautosendonconnect )
+        param->iAutoSendOnConnect = val;
+    else if( aElemName == Kdeletemailsatdisconnect )
+        param->iDeleteEmailsAtDisconnect = val;
+    else if( aElemName == Kimapidlecommand )
+        param->iImapIdleCommand = val;
+    else if( aElemName == Kmarkseeninsync )
+        param->iMarkSeenInSync = val;
+    else if( aElemName == Kenableexpungemode )
+        param->iEnableExpungeMode = val;
+    else if( aElemName == Kuseapopsecurelogin )
+        param->iUseApop = val;
+    else if( aElemName == Kdisconnectedusermode )
+        param->iDisconnectedUserMode = val;
+    else if( aElemName == Koutgoingsslwrapper )
+        param->iOutgoingSSLWrapper = val;
+    else if( aElemName == Koutgoingsecuresockets )
+        param->iOutgoingSecureSockets = val;
+    else if( aElemName == Kincludesignature )
+        param->iIncludeSignature = val;
+    else if( aElemName == Kaddvcard )
+        param->iAddVCard = val;
+    else if( aElemName == Krequestreceipts )
+        param->iRequestReceipts = val;
+    else if( aElemName == Ksmtpauth )
+        param->iSmtpAuth = val;
+    else
+        return EFalse;
+
+    return ETrue;
+    }
+
+TBool CCreatorMailboxElement::SetTextParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom )
+    {   
+    _LIT(KIncomingSrvPrefix, "mail.");
+    _LIT(KOutgoingSrvPrefix, "smtp.");
+    _LIT(KSrvPostfix, ".com");
+    _LIT(KDefaultConnMethod, "internet");
+    
+    if( aElemName == Kname )
+        {
+        if( aSetRandom )
+            {
+            TPtrC company(iEngine->RandomString(CCreatorEngine::ECompany));
+            SetContentToTextParamL(param->iMailboxName, company);
+            }
+        else
+            SetContentToTextParamL(param->iMailboxName, aElemContent);
+        }
+    else if( aElemName == Kincomingloginname )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName));
+            SetContentToTextParamL(param->iIncomingLoginName, random);
+            param->iIncomingLoginName->Des().LowerCase();
+            }
+        else
+            SetContentToTextParamL(param->iIncomingLoginName, aElemContent);
+        }
+    else if( aElemName == Kincomingpassword )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName));
+            SetContentToTextParamL(param->iIncomingPassword, random);
+            param->iIncomingPassword->Des().LowerCase();
+            }
+        else
+            SetContentToTextParamL(param->iIncomingPassword, aElemContent);
+        }
+    else if( aElemName == Kincomingservername )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::ECompany));
+            HBufC* srvName = HBufC::NewLC(KIncomingSrvPrefix().Length()+random.Length()+KSrvPostfix().Length());
+            srvName->Des().Copy(KIncomingSrvPrefix);
+            srvName->Des().Append(random);
+            srvName->Des().Append(KSrvPostfix);
+            SetContentToTextParamL(param->iIncomingServerName, srvName->Des());
+            CleanupStack::PopAndDestroy(); // srvName
+            }
+        else
+            SetContentToTextParamL(param->iIncomingServerName, aElemContent);
+        }
+    else if( aElemName == Kincomingconnectionmethod )
+        {
+        if( aSetRandom )                        
+            SetContentToTextParamL(param->iIncomingConnectionMethod, KDefaultConnMethod);            
+        else
+            SetContentToTextParamL(param->iIncomingConnectionMethod, aElemContent);
+        }
+    else if( aElemName == Kincomingfolderpath )
+        SetContentToTextParamL(param->iIncomingFolderPath, aElemContent);
+    else if( aElemName == Kpathseparator )
+        SetContentToTextParamL(param->iPathSeparator, aElemContent);
+    else if( aElemName == Koutgoingloginname )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName));
+            SetContentToTextParamL(param->iOutgoingLoginName, random);
+            param->iOutgoingLoginName->Des().LowerCase();
+            }
+        else
+            SetContentToTextParamL(param->iOutgoingLoginName, aElemContent);
+        }
+    else if( aElemName == Koutgoingpassword )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::EFirstName));
+            SetContentToTextParamL(param->iOutgoingPassword, random);
+            param->iOutgoingPassword->Des().LowerCase();
+            }
+        else
+            SetContentToTextParamL(param->iOutgoingPassword, aElemContent);
+        }
+    else if( aElemName == Koutgoingservername )
+        {
+        if( aSetRandom )
+            {
+            TPtrC random(iEngine->RandomString(CCreatorEngine::ECompany));
+            HBufC* srvName = HBufC::NewLC(KOutgoingSrvPrefix().Length()+random.Length()+KSrvPostfix().Length());
+            srvName->Des().Copy(KOutgoingSrvPrefix);
+            srvName->Des().Append(random);
+            srvName->Des().Append(KSrvPostfix);
+            SetContentToTextParamL(param->iOutgoingServerName, srvName->Des());
+            CleanupStack::PopAndDestroy(); // srvName
+            }
+        else
+            SetContentToTextParamL(param->iOutgoingServerName, aElemContent);
+        }
+    else if( aElemName == Koutgoingconnectionmethod )
+        {
+        if( aSetRandom )            
+            SetContentToTextParamL(param->iOutgoingConnectionMethod, KDefaultConnMethod);            
+        else
+            SetContentToTextParamL(param->iOutgoingConnectionMethod, aElemContent);
+        }
+    else if( aElemName == Kownemail )
+        {
+        if( aSetRandom )
+            {
+            TDesC* email = iEngine->CreateEmailAddressLC();
+            SetContentToTextParamL(param->iOwnEmailAddress, *email);
+            CleanupStack::PopAndDestroy(); // email
+            }
+        else
+            SetContentToTextParamL(param->iOwnEmailAddress, aElemContent);
+        }
+    else if( aElemName == Kemailalias )
+        {
+        if( aSetRandom )
+            {
+            _LIT(KSpace, " ");
+            TPtrC firstName(iEngine->RandomString(CCreatorEngine::EFirstName));
+            TPtrC lastName(iEngine->RandomString(CCreatorEngine::ESurname));
+            HBufC* alias = HBufC::NewLC(firstName.Length() + lastName.Length() + KSpace().Length());
+            alias->Des().Copy(firstName);
+            alias->Des().Append(KSpace);
+            alias->Des().Append(lastName);
+            SetContentToTextParamL(param->iOwnEmailAlias, alias->Des());
+            CleanupStack::PopAndDestroy(); // alias
+            }
+        else        
+            SetContentToTextParamL(param->iOwnEmailAlias, aElemContent);
+        }
+    else if( aElemName == Kreceiptaddress )
+        {
+        if( aSetRandom )
+            {
+            TDesC* email = iEngine->CreateEmailAddressLC();
+            SetContentToTextParamL(param->iReceiptAddress, *email);
+            CleanupStack::PopAndDestroy(); // email
+            }
+        else
+            SetContentToTextParamL(param->iReceiptAddress, aElemContent);
+        }
+    else if( aElemName == Kreplytoaddress )
+        {
+        if( aSetRandom )
+            {
+            TDesC* email = iEngine->CreateEmailAddressLC();
+            SetContentToTextParamL(param->iReceiptAddress, *email);
+            CleanupStack::PopAndDestroy(); // email
+            }
+        else
+            SetContentToTextParamL(param->iReplyToAddress, aElemContent);
+        }
+    else
+        return EFalse;
+    
+    return ETrue;
+    }
+
+TBool CCreatorMailboxElement::SetEnumParamL(const TDesC& aElemName, const TDesC& aElemContent, CMailboxesParameters* param, TBool aSetRandom )
+    {
+    // Get email options:
+    if( aElemName == Kgetemailoptions )
+        {
+        if( aSetRandom )
+            param->iGetEmailOptions = (CMailboxesParameters::TGetEmailOption) iEngine->RandomNumber(
+                                                    CMailboxesParameters::EGetHeaders, 
+                                                    CMailboxesParameters::EGetEmailOptionLast-1);
+        else if( CompareIgnoreCase(aElemContent, Kgetheaders ) == 0 )
+            param->iGetEmailOptions = CMailboxesParameters::EGetHeaders;
+        else if( CompareIgnoreCase(aElemContent, Kgetbodytext) == 0 )
+            param->iGetEmailOptions = CMailboxesParameters::EGetBodyText;
+        else if( CompareIgnoreCase(aElemContent, Kgetbodytextandattachments) == 0 )
+            param->iGetEmailOptions = CMailboxesParameters::EGetBodyTextAndAttachments;
+        else if( CompareIgnoreCase(aElemContent, Kgetattachments) == 0 )
+            param->iGetEmailOptions = CMailboxesParameters::EGetAttachments;
+        else if( CompareIgnoreCase(aElemContent, Kgetbodyalternativetext) == 0 )
+            param->iGetEmailOptions = CMailboxesParameters::EGetBodyAlternativeText;
+        else 
+            param->iGetEmailOptions = CMailboxesParameters::EUndef;
+        }
+    
+    // Subscribe type:
+    else if( aElemName == Ksubscribetype )
+        {
+        if( aSetRandom )
+            param->iSubscribeType = (TFolderSubscribeType) iEngine->RandomNumber( EUpdateNeither, EUpdateBoth );
+        else if( CompareIgnoreCase( aElemContent, Kupdatelocal) == 0 )
+            param->iSubscribeType = EUpdateLocal;            
+        else if( CompareIgnoreCase( aElemContent, Kupdateremote) == 0 )
+            param->iSubscribeType = EUpdateRemote;
+        else if( CompareIgnoreCase( aElemContent, Kupdateboth) == 0 )
+            param->iSubscribeType = EUpdateBoth;
+        else
+            param->iSubscribeType = EUpdateNeither;
+        }
+    
+    // Folder synchronization type:
+    else if( aElemName == Kfoldersynctype)
+        {
+        if( aSetRandom )
+            param->iSyncType = (TFolderSyncType) iEngine->RandomNumber(EUseCombination, EUseRemote);
+        else if( CompareIgnoreCase( aElemContent, Kuselocal) == 0 )
+            param->iSyncType = EUseLocal;
+        else if( CompareIgnoreCase( aElemContent, Kuseremote) == 0 )
+            param->iSyncType = EUseRemote;
+        else
+            param->iSyncType = EUseCombination;
+        }
+     
+    // Send copy to self option:
+    else if( aElemName == Kcopytoself )
+        {
+        if( aSetRandom )
+            param->iSendCopyToSelf = (TImSMTPSendCopyToSelf) iEngine->RandomNumber(ESendNoCopy, ESendCopyAsBccRecipient);
+        else if( CompareIgnoreCase( aElemContent, Kto) == 0 )
+            param->iSendCopyToSelf = ESendCopyAsToRecipient;
+        else if( CompareIgnoreCase( aElemContent, Kcc) == 0 )
+            param->iSendCopyToSelf = ESendCopyAsCcRecipient;
+        else if( CompareIgnoreCase( aElemContent, Kbcc) == 0 )
+            param->iSendCopyToSelf = ESendCopyAsBccRecipient;
+        else
+            param->iSendCopyToSelf = ESendNoCopy;
+        }
+    
+    // Send option:
+    else if( aElemName == Ksendoption )
+        {
+        if( aSetRandom )
+            param->iSendOption = (TImSMTPSendMessageOption) iEngine->RandomNumber(ESendMessageImmediately, ESendMessageOnRequest);
+        else if( CompareIgnoreCase( aElemContent, Konnextconnection) == 0 )
+            param->iSendOption = ESendMessageOnNextConnection;
+        else if( CompareIgnoreCase( aElemContent, Konrequest) == 0 )
+            param->iSendOption = ESendMessageOnRequest;
+        else
+            param->iSendOption = ESendMessageImmediately;
+        }
+    else
+        {
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+void CCreatorMailboxElement::ExecuteCommandL()
+    {
+    const CCreatorScriptAttribute* amountAttr = FindAttributeByName(KAmount);
+    const CCreatorScriptAttribute* typeAttr = FindAttributeByName(KMailboxType);
+    TInt amount = 1;    
+    if( amountAttr )
+        {
+        amount = ConvertStrToIntL(amountAttr->Value());
+        }
+    
+    TMailboxType mailboxType = EMailboxPOP3;
+    
+    if( typeAttr && CompareIgnoreCase(typeAttr->Value(), Kimap4) == 0 )
+        {
+        mailboxType = EMailboxIMAP4;
+        }
+    
+    // Get 'fields' element 
+    CCreatorScriptElement* fieldsElement = FindSubElement(KFields);
+    if( fieldsElement && fieldsElement->SubElements().Count() > 0)
+        {
+        // Get sub-elements
+        const RPointerArray<CCreatorScriptElement>& fields = fieldsElement->SubElements();        
+        // Create mailbox entries, the amount of entries is defined by amount:
+        for( TInt cI = 0; cI < amount; ++cI )
+            {            
+            CMailboxesParameters* param = new (ELeave) CMailboxesParameters;
+            CleanupStack::PushL(param);
+            
+            param->iMailboxType = mailboxType;
+            
+            for( TInt i = 0; i < fields.Count(); ++i )
+                {
+                CCreatorScriptElement* field = fields[i];
+                TPtrC elemName = field->Name();
+                TPtrC elemContent = field->Content();
+                const CCreatorScriptAttribute* randomAttr = fields[i]->FindAttributeByName(KRandomLength);
+                TBool useRandom = EFalse;
+                if( randomAttr || elemContent.Length() == 0 )
+                    {
+                    useRandom = ETrue;
+                    }
+                
+                if( SetTextParamL(elemName, elemContent, param, useRandom ) == EFalse &&
+                    SetBooleanParamL(elemName, elemContent, param, useRandom ) == EFalse &&
+                    SetIntegerParamL(elemName, elemContent, param, useRandom ) == EFalse &&
+                    SetEnumParamL(elemName, elemContent, param, useRandom ) )
+                    {
+                    LOGSTRING2("CCreatorMailboxElement::ExecuteCommandL: Unknown mailbox field: %S", &elemName);
+                    }
+                }
+            iEngine->AppendToCommandArrayL(ECmdCreateMessagingEntryMailboxes, param);
+            CleanupStack::Pop(); // param
+            }
+        }
+    else
+    	{
+    	iEngine->AppendToCommandArrayL(ECmdCreateMessagingEntryMailboxes, 0, amount);
+    	}
+    }