creator/inc/creator_scriptelement.h
changeset 0 d6fe6244b863
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/creator/inc/creator_scriptelement.h	Tue Feb 02 00:17:27 2010 +0200
@@ -0,0 +1,349 @@
+/*
+* 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:  
+*
+*/
+
+
+
+#ifndef CREATORSCRIPTELEMENT_H_
+#define CREATORSCRIPTELEMENT_H_
+
+#include "creator_randomdatafield.h"
+#include "creator_modulebase.h"
+#include "creator_model.h"
+#include <e32base.h>
+
+class CCreatorScriptElement;
+class CCreatorEngine;
+
+_LIT(KEmpty, "");
+_LIT(KContextSep, "::");
+
+// Common attributes:
+_LIT(KAmount, "amount");
+_LIT(KRandomLength, "randomlength");
+_LIT(KId, "id");
+_LIT(KMaxAmount, "maxamount");
+
+// Common element names:
+_LIT(KScript, "creatorscript");
+_LIT(KFields, "fields");
+_LIT(KContactSetRef, "contact-set-reference");
+_LIT(KExistingContacts, "numberofexistingcontacts");
+
+// Common attribute values:
+_LIT(KMax, "max");
+_LIT(KDefault, "default");
+_LIT(KIncrease, "incvalueforeachcopy");
+
+class CCreatorScriptElementCache : public CBase
+{
+public:
+    static CCreatorScriptElementCache* CCreatorScriptElementCache::NewL();
+    virtual ~CCreatorScriptElementCache();    
+        
+    void RemoveElements();    
+    void AddElementL(CCreatorScriptElement* aElement);
+private:
+    CCreatorScriptElementCache();
+    void ConstructL();
+    RPointerArray<CCreatorScriptElement> iElementCache;
+
+};
+
+
+class CCreatorScriptAttribute : public CBase
+{
+public:
+    static CCreatorScriptAttribute* NewL(const TDesC& aName, const TDesC& aValue);
+    static CCreatorScriptAttribute* NewLC(const TDesC& aName, const TDesC& aValue);
+    virtual ~CCreatorScriptAttribute();    
+    
+    TPtrC Name() const;
+    void SetNameL(const TDesC& aName);      
+    TPtrC Value() const;
+    void SetValueL(const TDesC& aValue);
+    
+protected:
+
+    CCreatorScriptAttribute();
+    virtual void ConstructL(const TDesC& aName, const TDesC& aValue);
+    
+private:
+    HBufC* iName;
+    HBufC* iValue;    
+};
+
+/**
+ * Base class for all elements
+ */
+class CCreatorScriptElement : public CBase
+{
+public:
+
+    static CCreatorScriptElement* CCreatorScriptElement::NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext = KNullDesC);
+
+    /**
+     * Destructor
+     */
+    virtual ~CCreatorScriptElement();
+    
+    /**
+     * Returns the array of sub-elements.
+     * @return Reference to the sub-element array.
+     */
+    virtual RPointerArray<CCreatorScriptElement> const& SubElements() const;
+    virtual RPointerArray<CCreatorScriptElement>& SubElements();
+    
+    /**
+     * Returns a sub-element.
+     * @param aIndex Sub-element array index.
+     * @return Pointer to a sub-element
+     */ 
+    virtual CCreatorScriptElement* SubElement(TInt aIndex);
+    
+    /**
+     * Finds a sub-element by a name.
+     * @param aName Name of the sub-element
+     * @return Pointer to the first matching sub-element. NULL if not found.
+     */
+    virtual CCreatorScriptElement* FindSubElement(const TDesC& aName);
+    
+    /**
+     * Removes all sub-elements.
+     */
+    virtual void RemoveSubElements();
+    
+    /**
+     * Removes a sub-element
+     * @param aIndex Index of the element to be removed
+     */
+    virtual void RemoveSubElementL(TInt aIndex);
+    
+    /**
+     * Adds an element to the sub-element list. 
+     * Leaves with error KErrNotSupported, if sub-element is illegal.
+     * Leaves with error KErrArgument, if the index in out of bounds.
+     * @param aElem Pointer to the element to be added. Takes ownership of the pointer.
+     * @param aIndex Sub-element array index where to add the element. -1 means that
+     * the element is added to the end of the array.
+     */
+    virtual void AddSubElementL(CCreatorScriptElement* aElem, TInt aIndex = -1);
+  
+    /**
+     * Returns the array of attributes.
+     * @return Reference to the attribute array.
+     */
+    virtual RPointerArray<CCreatorScriptAttribute> const& Attributes() const;
+        
+    /**
+     * Returns an attribute.
+     * @param aIndex Attribute array index.
+     * @return Pointer to a attribute
+     */ 
+    virtual CCreatorScriptAttribute* Attribute(TInt aIndex);
+    
+    /**
+     * Removes all attributes.
+     */
+    virtual void RemoveAttributes();
+    
+    /**
+     * Removes an attribute
+     * @param aIndex Index of the attribute to be removed
+     */
+    virtual void RemoveAttributeL(TInt aIndex);
+    
+    /**
+     * Adds an attribute to the attribute list. 
+     * Leaves with error KErrNotSupported, if attribute is illegal.
+     * @param aAttribute Pointer to the element to be added. Takes ownership of the pointer.
+     * @param aIndex Attribute array index where to add the attribute. -1 means that
+     * the attribute is added to the end of the array.
+     */
+    virtual void AddAttributeL(CCreatorScriptAttribute* aAttribute, TInt aIndex = -1);
+    
+    /**
+     * Finds attribute with the given name. First match is returned.
+     */
+    virtual const CCreatorScriptAttribute* FindAttributeByName(const TDesC& aName) const;
+    virtual CCreatorScriptAttribute* FindAttributeByName(const TDesC& aName);
+
+    /**
+     * Returns element name
+     * @return Element name
+     */
+    virtual TPtrC Name() const;
+    
+    /**
+     * Sets the element name.
+     * @param aName Element name
+     */
+    virtual void SetNameL(const TDesC& aName);
+    
+    /**
+     * Returns element content
+     * @return Element content
+     */
+    virtual TPtrC Content() const;
+    
+    /**
+     * Set the content of the element.
+     * @param aContenct Element content
+     */
+    virtual void SetContentL(const TDesC& aContent);
+    virtual void AppendContentL(const TDesC& aContent);
+    
+    /**
+     * Returns element context
+     * @return Element context
+     */
+    virtual TPtrC Context() const;
+        
+    /**
+     * Set the context of the element.
+     * @param aContenct Element context
+     */
+    virtual void SetContextL(const TDesC& aContext);
+    
+    /**
+     * Tells whether the element should be cached for future use.
+     * @return ETrue if the element should be cached for future use, EFalse otherwise.
+     */
+    virtual TBool IsCacheNeeded();
+    virtual void AddToCacheL(CCreatorScriptElementCache& aCache);
+    virtual void AddToCacheL();
+    virtual TBool IsCommandElement() const;
+    virtual void ExecuteCommandL();
+    //virtual void SaveCommandResultsL();
+    //virtual void DiscardCommandResultsL();
+    virtual TBool IsRoot() const;
+    virtual RPointerArray<CCreatorModuleBaseParameters>& CommandParameters();
+    virtual const RPointerArray<CCreatorModuleBaseParameters>& CommandParameters() const;
+    
+protected:
+
+    /**
+     * Constructors. 
+     */    
+    CCreatorScriptElement(CCreatorEngine* aEngine = 0);
+    
+    /**
+     * @param aName Name of the element.
+     */
+    virtual void ConstructL(const TDesC& aName, const TDesC& aContext = KNullDesC);
+    
+    /**
+     * Tells whethet the sub-element is allowed or not.
+     * @param aElem Sub-element to be tested.
+     * @return Boolean value telling whether the sub-element is allowed 
+     * to be added or not.
+     */
+    virtual TBool IsSubElementSupported(const CCreatorScriptElement& aElem) const;
+    
+    virtual MCreatorRandomDataField::TRandomLengthType ResolveRandomDataTypeL(const CCreatorScriptAttribute& aAttr, TInt& aRandomLen ) const;
+    
+    virtual TBool ConvertStrToBooleanL(const TDesC& aStr) const;
+    virtual TInt ConvertStrToIntL(const TDesC& aStr) const;
+    virtual TUint ConvertStrToUintL(const TDesC& aStr) const;
+    virtual void ConvertStrToReal64L(const TDesC& aStr, TReal64& aVal) const;
+    virtual void ConvertStrToReal32L(const TDesC& aStr, TReal32& aVal) const;
+    
+    virtual void AppendContactSetReferenceL(const CCreatorScriptElement& aContactSetRefElem, RArray<TLinkIdParam>& aLinkArray ) const;    
+    
+    virtual void SetContentToTextParamL(HBufC*& aPtr, const TDesC& aContent );
+    
+    virtual TTime ConvertToDateTimeL(const TDesC& aDtStr) const;
+    
+    virtual TInt CompareIgnoreCase(const TDesC& aStr1, const TDesC& aStr2 ) const;
+    
+    /**
+     * Increases phonenumber by aDelta.
+     * 
+     * Special cases, that are handled:
+     * +9          -> +9, +10, +11...
+     * +3584098#99 -> +3584098#99, +3584098#100, +3584098#101...
+     * #           -> #0, #1, #2...
+     * 123#        -> 123#0, 123#1, 123#2...
+     * 099         -> 099, 100, 101...
+     * 
+     * @param aOriginal original phonenumber
+     * @param aDelta number to be added to original number. Must be >= 0.
+     * @param aIncreased on return contains the increased number.
+     *        The buffer must be allocated by the caller.
+     */
+    void IncreasePhoneNumL( const TDesC& aOriginal, TInt aDelta, HBufC* aIncreased ) const;
+    
+protected:
+    
+    // Sub-element array
+    RPointerArray<CCreatorScriptElement> iSubElements;
+    // Attribute array
+    RPointerArray<CCreatorScriptAttribute> iAttributes;
+    // Element name (e.g. "contact")
+    HBufC* iName;
+    // Element content
+    HBufC* iContent;
+    // Context
+    HBufC* iContext;
+    
+    TBool iIsCommandElement;
+    TBool iIsRoot;
+    CCreatorEngine* iEngine;
+    RPointerArray<CCreatorModuleBaseParameters> iParameters;
+};
+
+/**
+ * Script element
+ */
+class CCreatorScriptRoot : public CCreatorScriptElement
+{
+public:
+    static CCreatorScriptRoot* NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext = KNullDesC);
+protected:
+    CCreatorScriptRoot(CCreatorEngine* aEngine);
+};
+
+/**
+ * Calendar elements
+ */
+
+/**
+ * Base class for calendar elements
+ */
+class CCreatorCalendarElementBase : public CCreatorScriptElement
+{
+public:
+    static CCreatorCalendarElementBase* NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext = KNullDesC);
+protected:
+    CCreatorCalendarElementBase(CCreatorEngine* aEngine);
+};
+
+/**
+ * Message elements
+ */
+
+/**
+ * Base class for message elements
+ */
+class CCreatorMessageElementBase : public CCreatorScriptElement
+{
+public:
+    static CCreatorMessageElementBase* NewL(CCreatorEngine* aEngine, const TDesC& aName, const TDesC& aContext = KNullDesC);
+protected:
+    CCreatorMessageElementBase(CCreatorEngine* aEngine);
+};
+
+#endif /*CREATORSCRIPTELEMENT_H_*/