creator/engine/src/creator_contactelement.cpp
changeset 17 4f2773374eff
child 19 4b22a598b890
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/engine/src/creator_contactelement.cpp	Fri May 14 15:53:02 2010 +0300
@@ -0,0 +1,165 @@
+/*
+* Copyright (c) 2010 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_contactelement.h"
+#include "creator_traces.h"
+#include "creator_factory.h"
+#include "creator_contactsetcache.h"
+#include <xml/documentparameters.h>
+
+using namespace Xml;
+using namespace creatorcontact;
+
+/**
+ * Contact field element mappings:
+ */
+enum TContactFieldDataType
+    {
+    EDataTypeText,
+    EDataTypeBinary,
+    EDataTypeDateTime    
+    };
+    
+class FieldMapping
+{
+public:
+    TPtrC iElementName;
+    TInt  iFieldCode;
+    TContactFieldDataType iDataType;
+};
+
+CCreatorContactElementBase* CCreatorContactElementBase::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext)
+    {
+    LOGSTRING("Creator: CCreatorContactElementBase::NewL");
+    CCreatorContactElementBase* self = new (ELeave) CCreatorContactElementBase(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop();
+    return self;
+    }
+CCreatorContactElementBase::CCreatorContactElementBase(CCreatorEngine* aEngine) : CCreatorScriptElement(aEngine)
+    { }
+
+CCreatorContactElement* CCreatorContactElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext)
+    {
+    LOGSTRING("Creator: CCreatorContactElement::NewL");
+    CCreatorContactElement* self = new (ELeave) CCreatorContactElement(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop();
+    return self;
+    }
+CCreatorContactElement::CCreatorContactElement(CCreatorEngine* aEngine) 
+: 
+CCreatorContactElementBase(aEngine)
+    { 
+    iIsCommandElement = ETrue;
+    }
+
+
+void CCreatorContactElement::ExecuteCommandL()
+    {}
+
+CCreatorContactSetElement* CCreatorContactSetElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext)
+    {
+    LOGSTRING("Creator: CCreatorContactSetElement::NewL");
+    CCreatorContactSetElement* self = new (ELeave) CCreatorContactSetElement(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop();
+    return self;
+    }
+CCreatorContactSetElement::CCreatorContactSetElement(CCreatorEngine* aEngine) 
+: 
+CCreatorContactElementBase(aEngine)
+    { }
+
+void CCreatorContactSetElement::ExecuteCommandL()
+    { }
+
+void CCreatorContactSetElement::AddToCacheL()
+    {    
+    LOGSTRING("Creator: CCreatorContactSetElement::AddToCacheL");
+    const CCreatorScriptAttribute* linkIdAttr = this->FindAttributeByName(KId);
+    const CCreatorScriptAttribute* existingElemsAttr = this->FindAttributeByName(KExistingContacts);
+    TInt numOfExistingContacts = 0;
+    if( existingElemsAttr )
+        {
+        numOfExistingContacts = ConvertStrToIntL(existingElemsAttr->Value());
+        }
+    if( linkIdAttr )
+        {
+        TInt linkId = ConvertStrToIntL(linkIdAttr->Value());
+        if( linkId > 0 )
+            {    
+            CCreatorContactSet* newSet = CCreatorContactSet::NewL(linkId, numOfExistingContacts);
+            CleanupStack::PushL(newSet);
+            ContactLinkCache::Instance()->AppendL(newSet);
+            CleanupStack::Pop(newSet);
+                 
+            // Mark sub-elements (i.e. contacts) to this contact-set:
+            for( TInt i = 0; i < iSubElements.Count(); ++i )
+                {
+                for( TInt j = 0; j < iSubElements[i]->CommandParameters().Count(); ++j)
+                    {
+                    CCreatorModuleBaseParameters* params = iSubElements[i]->CommandParameters()[j];
+                    if( params )
+                        {
+                        params->SetScriptLinkId(linkId);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+CCreatorContactGroupElement* CCreatorContactGroupElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext)
+    {
+    LOGSTRING("Creator: CCreatorContactGroupElement::NewL");
+    CCreatorContactGroupElement* self = new (ELeave) CCreatorContactGroupElement(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop();
+    return self;
+    }
+CCreatorContactGroupElement::CCreatorContactGroupElement(CCreatorEngine* aEngine)
+: 
+CCreatorContactElementBase(aEngine)
+    { 
+    iIsCommandElement = ETrue;
+    }
+
+
+void CCreatorContactGroupElement::ExecuteCommandL()
+    {}
+
+CCreatorContactFieldElement* CCreatorContactFieldElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext)
+    {
+    LOGSTRING("Creator: CCreatorContactFieldElement::NewL");
+    CCreatorContactFieldElement* self = new (ELeave) CCreatorContactFieldElement(aEngine);
+    CleanupStack::PushL(self);
+    self->ConstructL(aName, aContext);
+    CleanupStack::Pop();
+    return self;
+    }
+
+CCreatorContactFieldElement::CCreatorContactFieldElement(CCreatorEngine* aEngine) 
+: 
+CCreatorScriptElement(aEngine)
+    { }