williamr@2: /* williamr@2: * Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@4: * under the terms of "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@4: * at the URL "http://www.eclipse.org/legal/epl-v10.html". williamr@2: * williamr@2: * Initial Contributors: williamr@2: * Nokia Corporation - initial contribution. williamr@2: * williamr@2: * Contributors: williamr@2: * williamr@2: * Description: Xml properties class declaration williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef SEN_XML_PROPERTIES_H williamr@2: #define SEN_XML_PROPERTIES_H williamr@2: williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class RWriteStream; williamr@2: class CSenXmlReader; williamr@2: class CSenPropertiesFragment; williamr@2: williamr@2: // CONSTANTS williamr@2: _LIT8(KSenXmlPropertiesLocalname, "Properties"); williamr@2: _LIT8(KSenTypeAttributeName, "Type"); williamr@2: _LIT8(KSenOmittedAttributeName, "Omitted"); williamr@2: _LIT8(KSenOmittedTrueNoValue, ""); williamr@2: _LIT8(KSenPropertyTrue, "true"); williamr@2: _LIT8(KSenPropertyFalse, "false"); williamr@2: williamr@2: williamr@2: //_LIT8(KSenXmlPropertiesQualifiedname, "props:Properties); williamr@2: //_LIT8(KSenXmlPropertiesNamespace, "urn:com.nokia.Sen.properties.1.0"); williamr@2: williamr@2: // CLASS DESCRIPTION williamr@2: williamr@2: /* williamr@2: * williamr@2: * This class provides XML based implementation, which is mainly targetted williamr@2: * for further evolved subclasses, which extend this to more concrete classes, williamr@2: * like CSenHttpTransportProperties. Class provides serialization of properties williamr@2: * into XML. williamr@2: * williamr@2: * Please bear in mind the following limitations: williamr@2: * williamr@2: * 1. It is illegal to provide following property names as argument to williamr@2: * any of the setter methods, as they become XML tags - local element williamr@2: * names - when properties object is serialized: williamr@2: * (a) zero-length descriptor williamr@2: * (b) descriptor starts with number and williamr@2: * c descriptor contains any of the 5 basic XML entities in williamr@2: * unencoded form (&, ', ", <, >) williamr@2: * williamr@2: * 2. It is illegal to provide following property values as argument to williamr@2: * any of the setter methods, as they become XML element content when williamr@2: * properties object is serialized: williamr@2: * (a) descriptor contains any of the 5 basic XML entities in williamr@2: * unencoded form (&, ', ", <, >) williamr@2: * @lib SenUtils.lib williamr@2: * @since Series60 5.0 williamr@2: */ williamr@2: williamr@2: class CSenXmlProperties : public CBase, public MSenProperties williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @return a pointer to new CSenXmlProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewL(); williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @return a pointer to new CSenXmlProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewLC(); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @param aXmlUtf8 williamr@2: * @param aParser It is a XML reader williamr@2: * @return a pointer to new CSenTransportProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewL(const TDesC8& aXmlUtf8, williamr@2: CSenXmlReader& aParser); williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @param aXmlUtf8 williamr@2: * @param aParser It is a XML reader williamr@2: * @return a pointer to new CSenTransportProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewLC(const TDesC8& aXmlUtf8, williamr@2: CSenXmlReader& aParser); williamr@2: williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @param aElement williamr@2: * @return a pointer to new CSenXmlProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewL(const CSenElement& aElement); williamr@2: /** williamr@2: * Basic constructor. williamr@2: * @param aElement williamr@2: * @return a pointer to new CSenXmlProperties class instance. williamr@2: */ williamr@2: IMPORT_C static CSenXmlProperties* NewLC(const CSenElement& aElement); williamr@2: williamr@2: // From MSenProperties williamr@2: virtual void SetReader(CSenXmlReader& aReader); williamr@2: virtual TSenPropertiesClassType PropertiesClassType(); williamr@2: virtual void WriteToL(RWriteStream& aWriteStream); williamr@2: virtual void ReadFromL(const TDesC8& aBuffer); williamr@2: virtual HBufC8* AsUtf8L(); williamr@2: virtual HBufC8* AsUtf8LC(); williamr@2: virtual TBool IsSafeToCast(TSenPropertiesClassType aClass); williamr@2: williamr@2: virtual MSenProperties* Clone(TInt& aOkOrError) const; williamr@2: virtual MSenProperties* CloneL() const; williamr@2: williamr@2: /** williamr@2: * @see MSenProperties williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aName contains illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aName is zero length. williamr@2: */ williamr@2: virtual TInt SetPropertyL(const TDesC8& aName, williamr@2: const TDesC8& aValue); williamr@2: williamr@2: virtual TInt PropertyL(const TDesC8& aName, TPtrC8& aValue); williamr@2: williamr@2: /** williamr@2: * @see MSenProperties williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aName contains illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aName is zero length. williamr@2: */ williamr@2: virtual TInt SetIntPropertyL(const TDesC8& aName, williamr@2: const TInt aValue); williamr@2: williamr@2: virtual TInt IntPropertyL(const TDesC8& aName, williamr@2: TInt& aValue); williamr@2: /** williamr@2: * @see MSenProperties williamr@2: * Leave codes: williamr@2: * KErrSenInvalidCharacters if aName contains illegal characters. williamr@2: * KErrSenZeroLengthDescriptor if aName is zero length. williamr@2: */ williamr@2: virtual TInt SetBoolPropertyL(const TDesC8& aName, williamr@2: const TBool aValue); williamr@2: williamr@2: virtual TInt BoolPropertyL(const TDesC8& aName, williamr@2: TBool& aValue); williamr@2: virtual TInt SetOmittedL(const TDesC8& aName, TBool aValue); williamr@2: williamr@2: virtual TInt RemovePropertyL(const TDesC8& aName); williamr@2: /** williamr@2: * Destructor. williamr@2: */ williamr@2: virtual ~CSenXmlProperties(); williamr@2: williamr@2: /** williamr@2: * Sets new property. williamr@2: * williamr@2: * If property with given name does not exist, williamr@2: * new property with given value will be added. Otherwise the value of williamr@2: * existing property will be updated. williamr@2: * williamr@2: * @since Series60 williamr@2: * @param aName Name of the property, which can be later used to williamr@2: * refer the given value. williamr@2: * @param aValue Is the value of this property. williamr@2: * @param aType Is the type of this property. williamr@2: * @return KErrNone if no error, or some of the system wide williamr@2: * error codes. williamr@2: */ williamr@2: virtual TInt SetPropertyL(const TDesC8& aName, williamr@2: const TDesC8& aValue, williamr@2: const TDesC8& aType); williamr@2: williamr@2: /** williamr@2: * Gets the value of the property behind certain name. williamr@2: * @since Series60 williamr@2: * @param aName The name identifying this property. williamr@2: * @param aValue A TPtrC8 reference to be filled in with the value of williamr@2: * the property. williamr@2: * @param aType A TPtrC8 reference to be filled in with the type of williamr@2: * the property. williamr@2: * @return KErrNone if no error, or some of the system wide williamr@2: * error codes. williamr@2: */ williamr@2: virtual TInt PropertyL(const TDesC8& aName, williamr@2: TPtrC8& aValue, williamr@2: TPtrC8& aType); williamr@2: williamr@2: protected: // base class functions williamr@2: williamr@2: virtual void BaseConstructL(const TDesC8& aLocalname, williamr@2: const TDesC8& aXml, williamr@2: CSenXmlReader* aParser = NULL); williamr@2: williamr@2: virtual void BaseConstructL(const TDesC8& aNamespace, williamr@2: const TDesC8& aLocalname, williamr@2: const TDesC8& aXml, williamr@2: CSenXmlReader* aParser = NULL); williamr@2: williamr@2: virtual void BaseConstructL(const TDesC8& aNamespace, williamr@2: const TDesC8& aLocalname, williamr@2: const TDesC8& aQualifiedName, williamr@2: const TDesC8& aXml, williamr@2: CSenXmlReader* aParser = NULL); williamr@2: williamr@2: virtual void BaseConstructL(const CSenElement& aElement); williamr@2: williamr@2: protected: williamr@2: /** williamr@2: * Constructor. williamr@2: */ williamr@2: CSenXmlProperties(); williamr@2: williamr@2: protected: williamr@2: CSenPropertiesFragment* ipFragment; // owned williamr@2: CSenXmlReader* ipReader; // owned williamr@2: }; williamr@2: williamr@2: #endif // SEN_XML_PROPERTIES_H