williamr@2: /* williamr@2: * Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: * All rights reserved. williamr@2: * This component and the accompanying materials are made available williamr@2: * under the terms of the License "Eclipse Public License v1.0" williamr@2: * which accompanies this distribution, and is available williamr@2: * 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: williamr@2: * williamr@2: */ williamr@2: williamr@2: williamr@2: williamr@2: williamr@2: /** williamr@2: @file williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __CAF_METADATA_H__ williamr@2: #define __CAF_METADATA_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: class RReadStream; williamr@2: class RWriteStream; williamr@2: williamr@2: namespace ContentAccess williamr@2: { williamr@2: /** Stores a field and data pair for use in a supplier import operation williamr@2: williamr@2: The field and data can be any values the application doing the import thinks williamr@2: the agent will find useful. Some information that could be included here are williamr@2: headers, eg: williamr@2: williamr@2: "Content Type", "application/vnd.oma.drm.dm" williamr@2: williamr@2: The application can include anything it likes, if the agent doesn't understand williamr@2: the header it can just ignore it, eg: williamr@2: williamr@2: "Colour", "Yellow" williamr@2: williamr@2: williamr@2: CMetaData can be used with 8-bit or unicode data and automatically performs williamr@2: conversions between the two. williamr@2: williamr@2: Applications should use the unicode functions whenever possible because it williamr@2: removes the risk of losing information during the unicode to 8 bit conversion. williamr@2: williamr@2: @publishedPartner williamr@2: @released williamr@2: */ williamr@2: class CMetaData : public CBase williamr@2: { williamr@2: public: williamr@2: /** Construct a new CMetaData with 8 bit data williamr@2: The 8-bit data will be stored in CMetaData as unicode williamr@2: williamr@2: @param aField The name of the field williamr@2: @param aData The data associated with the field williamr@2: @return A CMetaData object populated with the given field and data williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: static CMetaData* NewL(const TDesC8& aField, const TDesC8& aData); williamr@2: /** Construct a new CMetaData with unicode data williamr@2: williamr@2: @param aField The name of the field williamr@2: @param aData The data associated with the field williamr@2: @return A CMetaData object populated with the given field and data williamr@2: williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: static CMetaData* NewL(const TDesC16& aField, const TDesC16& aData); williamr@2: williamr@2: /** Construct a new CMetaData from a data stream williamr@2: williamr@2: @param aStream The stream to read the CMetaData object from williamr@2: @return A CMetaData object read from the stream williamr@2: williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: static CMetaData* NewL(RReadStream& aStream); williamr@2: williamr@2: /** destructor williamr@2: */ williamr@2: virtual ~CMetaData(); williamr@2: williamr@2: /** The field name williamr@2: @return The field name williamr@2: */ williamr@2: IMPORT_C const TDesC& Field() const; williamr@2: williamr@2: /** The data value williamr@2: @return The data value williamr@2: */ williamr@2: IMPORT_C const TDesC& Data() const; williamr@2: williamr@2: /** The field name williamr@2: @return The field name williamr@2: */ williamr@2: IMPORT_C const TDesC8& Field8() const; williamr@2: williamr@2: /** The data value williamr@2: @return The data value williamr@2: */ williamr@2: IMPORT_C const TDesC8& Data8() const; williamr@2: williamr@2: /** Write the CMetaData to a data stream williamr@2: williamr@2: @param aStream The stream to write the CMetaData object to williamr@2: @internalComponent williamr@2: @released williamr@2: */ williamr@2: void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: CMetaData(TBool aUnicode); williamr@2: void ConstructL(const TDesC8& aField, const TDesC8& aData); williamr@2: void ConstructL(const TDesC16& aField, const TDesC16& aData); williamr@2: williamr@2: /** Read the CMetaData from a data stream williamr@2: */ williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: williamr@2: private: williamr@2: HBufC* iField; williamr@2: HBufC* iData; williamr@2: HBufC8* iField8; williamr@2: HBufC8* iData8; williamr@2: TBool iUnicode; williamr@2: }; williamr@2: } williamr@2: williamr@2: #endif