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: @file williamr@4: @publishedAll williamr@2: @released williamr@2: */ williamr@2: williamr@2: williamr@2: #ifndef __CAF_METADATAARRAY_H__ williamr@2: #define __CAF_METADATAARRAY_H__ williamr@2: williamr@2: #include williamr@2: #include williamr@2: williamr@2: class RWriteStream; williamr@2: class RReadStream; williamr@2: williamr@2: namespace ContentAccess williamr@2: { williamr@2: class CMetaData; williamr@2: williamr@2: /** williamr@2: Stores an array of CMetaData objects for use in a supplier import operation williamr@2: williamr@2: It provides search and routines (for both 8 bit and Unicode) to find the williamr@2: value corresponding to a particular field in the array. williamr@2: williamr@2: Applications should use the unicode search function whenever possible because williamr@2: it removes the risk of losing information during the unicode to 8 bit williamr@2: conversion. williamr@2: williamr@2: */ williamr@2: class CMetaDataArray : public CBase williamr@2: { williamr@2: public: williamr@2: williamr@2: IMPORT_C static CMetaDataArray* NewL(); williamr@2: IMPORT_C static CMetaDataArray* NewLC(); williamr@2: williamr@2: /** Construct a CMetaDataArray from a stream williamr@2: @param aStream the stream containing the metadata array williamr@2: @return a new CMetaDataArray williamr@2: */ williamr@2: IMPORT_C static CMetaDataArray* NewL(RReadStream& aStream); williamr@2: williamr@2: /** Destructor */ williamr@2: virtual ~CMetaDataArray(); williamr@2: williamr@2: /** Adds a new meta data, williamr@2: @param aField The name used to index the value of interest williamr@2: @param aData The data williamr@2: */ williamr@2: IMPORT_C void AddL(const TDesC8& aField, const TDesC8& aData); williamr@2: williamr@2: /** Adds a new meta data, williamr@2: @param aField The name used to index the value of interest williamr@2: @param aData The data williamr@2: */ williamr@2: IMPORT_C void AddL(const TDesC& aField, const TDesC& aData); williamr@2: williamr@2: /** Retrieves the MetaData at the given index williamr@2: * williamr@2: * @param aIndex The index of the meta-data williamr@2: * @return williamr@2: */ williamr@2: IMPORT_C const CMetaData& operator [] (TInt aIndex) const; williamr@2: williamr@2: /** The number of metadata objects in the list williamr@2: */ williamr@2: IMPORT_C TInt Count() const; williamr@2: williamr@2: /** Find the unicode data for a given unicode field. williamr@2: williamr@2: @param aField The field to retrieve williamr@2: @param aMatchCase ETrue To perform case sensitive search, EFalse - To perform non case sensitive search williamr@2: @return The corresponding data or else a zero length string if the field was not found williamr@2: */ williamr@2: IMPORT_C const TDesC& SearchL(const TDesC& aField, TBool aMatchCase = EFalse) const; williamr@2: williamr@2: /** Find the 8 bit data for a given 8 bit field. williamr@2: williamr@2: @param aField8 The field to retrieve williamr@2: @param aMatchCase ETrue To perform case sensitive search, EFalse - To perform non case sensitive search williamr@2: @return The corresponding data or else a zero length string if the field was not found williamr@2: */ williamr@2: IMPORT_C const TDesC8& SearchL(const TDesC8& aField8, TBool aMatchCase = EFalse) const; williamr@2: williamr@2: /** Externalizes the CMetaDataArray object to a stream. williamr@2: * williamr@2: * @param aStream The stream to write the header information to. williamr@2: */ williamr@2: IMPORT_C void ExternalizeL(RWriteStream& aStream) const; williamr@2: williamr@2: private: williamr@2: CMetaDataArray(); williamr@2: void InternalizeL(RReadStream& aStream); williamr@2: private: williamr@2: williamr@2: RPointerArray iArray; williamr@2: williamr@2: // Length of the longest data item in the array williamr@2: TInt iMaxFieldLength; williamr@2: }; williamr@2: } williamr@2: williamr@2: #endif