diff -r 000000000000 -r d6fe6244b863 creator/inc/creator_scriptelement.h --- /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 + +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 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 const& SubElements() const; + virtual RPointerArray& 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 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& CommandParameters(); + virtual const RPointerArray& 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& 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 iSubElements; + // Attribute array + RPointerArray iAttributes; + // Element name (e.g. "contact") + HBufC* iName; + // Element content + HBufC* iContent; + // Context + HBufC* iContext; + + TBool iIsCommandElement; + TBool iIsRoot; + CCreatorEngine* iEngine; + RPointerArray 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_*/