diff -r 000000000000 -r 95b198f216e5 omadrm/drmengine/utils/src/DrmRel2_1StringDict00.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/omadrm/drmengine/utils/src/DrmRel2_1StringDict00.cpp Thu Dec 17 08:52:27 2009 +0200 @@ -0,0 +1,279 @@ +/* +* Copyright (c) 2007-2009 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: Implementation class for OMA 2.1 Drm String Dictionary +* +*/ + + +#include +#include +#include +#include + +#include "drmrel2_1stringdict00.h" +#include "drmrel2_1stringdict00tagtable.h" +#include "drmrel2_1stringdict00attributetable.h" +#include "drmrel2_1stringdict00attributevaluetable.h" + +using namespace Xml; + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::NewL +// ----------------------------------------------------------------------------- +// +MStringDictionary* CDrmRel2_1StringDict00::NewL( TAny* aStringPool ) + { + CDrmRel2_1StringDict00* self( + new(ELeave) CDrmRel2_1StringDict00( + reinterpret_cast( aStringPool ) ) ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return ( static_cast( self ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::CDrmRel2_1StringDict00 +// ----------------------------------------------------------------------------- +// +CDrmRel2_1StringDict00::CDrmRel2_1StringDict00( RStringPool* aStringPool ) + : iStringPool( *aStringPool ), iCodePage( 0 ) + { + // do nothing; + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::ConstructL +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::ConstructL() + { + // we don't own this stringpool + iStringPool.OpenL( DrmRel2_1StringDict00TagTable::Table ); + iStringPool.OpenL( DrmRel2_1StringDict00AttributeTable::Table ); + iStringPool.OpenL( DrmRel2_1StringDict00AttributeValueTable::Table ); + + iCodepage00Table = CDictionaryCodePage::NewL( + &DrmRel2_1StringDict00TagTable::Table, + &DrmRel2_1StringDict00AttributeTable::Table, + &DrmRel2_1StringDict00AttributeValueTable::Table, + 0 ); // codepage + + // Construct the correlation mapping + iCodepage00Table->ConstructIndexMappingL( + iTagCodePage00, + CDictionaryCodePage::EStringTypeElement ); + + iCodepage00Table->ConstructIndexMappingL( + iAttributeCodePage00, + CDictionaryCodePage::EStringTypeAttribute ); + + iCodepage00Table->ConstructIndexMappingL( + iAttributeValueCodePage00, + CDictionaryCodePage::EStringTypeAttributeValue ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::Release +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::Release() + { + delete ( this ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::~CCDrmRel2_1StringDict00 +// ----------------------------------------------------------------------------- +// +CDrmRel2_1StringDict00::~CDrmRel2_1StringDict00() + { + if ( iCodepage00Table ) + { + delete iCodepage00Table; + } + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::ElementL +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::ElementL( + TInt aToken, + RString& aElement) const + { + TInt index( iCodepage00Table->StringPoolIndexFromToken( + aToken, + CDictionaryCodePage::EStringTypeElement ) ); + + if ( index == KErrXmlStringPoolTableNotFound ) + { + User::Leave( KErrXmlUnsupportedElement ); + } + + aElement = iStringPool.String( + index, + *( iCodepage00Table->StringTable( + CDictionaryCodePage::EStringTypeElement ) ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::AttributeL +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::AttributeL( + TInt aToken, + RString& aAttribute) const + { + TInt index( iCodepage00Table->StringPoolIndexFromToken( + aToken, + CDictionaryCodePage::EStringTypeAttribute ) ); + + if ( index == KErrXmlStringPoolTableNotFound ) + { + User::Leave( KErrXmlUnsupportedAttribute ); + } + + aAttribute = iStringPool.String( + index, + *(iCodepage00Table->StringTable( + CDictionaryCodePage::EStringTypeAttribute ) ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::AttributeValuePairL +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::AttributeValuePairL( + TInt aToken, + RString& aAttribute, + RString& aValue) const + { + AttributeL( aToken, aAttribute ); + AttributeValueL( aToken, aValue ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::AttributeValueL +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::AttributeValueL( + TInt aToken, + RString& aValue ) const + { + + TInt index( iCodepage00Table->StringPoolIndexFromToken( + aToken, CDictionaryCodePage::EStringTypeAttributeValue ) ); + + if ( index == KErrXmlStringPoolTableNotFound ) + { + User::Leave( KErrXmlUnsupportedAttributeValue ); + } + + aValue = iStringPool.String( + index, + *(iCodepage00Table->StringTable( + CDictionaryCodePage::EStringTypeAttributeValue ) ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::CompareThisDictionary +// ----------------------------------------------------------------------------- +// +TBool CDrmRel2_1StringDict00::CompareThisDictionary( + const RString& aDictionaryDescription ) const + { + // If this string dictionary has many codepages then all these comparisons + // should go here.Remember, the string dictionary loads up all the + // RStringTables into its RStringPool on construction. So if the comparison + // fails we do not have it. + return ( ( aDictionaryDescription == + iStringPool.String( + DrmRel2_1StringDict00TagTable::EUri, + DrmRel2_1StringDict00TagTable::Table ) ) || + + ( aDictionaryDescription == + iStringPool.String( + DrmRel2_1StringDict00TagTable::EPublicId, + DrmRel2_1StringDict00TagTable::Table ) ) || + + ( aDictionaryDescription == + iStringPool.String( + DrmRel2_1StringDict00TagTable::EFormalPublicId, + DrmRel2_1StringDict00TagTable::Table ) ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::SwitchCodePage +// ----------------------------------------------------------------------------- +// +TInt CDrmRel2_1StringDict00::SwitchCodePage(TInt aCodePage) + { + // We only have one codepage so can't switch + if ( aCodePage != iCodePage ) + { + return KErrXmlMissingStringDictionary; + } + return iCodePage; + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::PublicIdentifier +// This method obtains the public identifier from the StringTable. +// Either the formal or non formal public id will do. +// The stringDictionary .rss files must list both these as Wbxml +// documents have one or the other. +// +// @param aPubId The public identifier for this string dictionary. +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::PublicIdentifier( RString& aPubId ) + { + aPubId = iStringPool.String( + DrmRel2_1StringDict00TagTable::EFormalPublicId, + *( iCodepage00Table->StringTable( + CDictionaryCodePage::EStringTypeElement ) ) ); + } + +// ----------------------------------------------------------------------------- +// CDrmRel2_1StringDict00::NamespaceUri +// The element types in the Device Information DTD are defined within +// a namespace associated with the Uri/Urn available from the StringTable. +// The RString need not be closed, but closing is harmless. +// +// @param aUri The associated namespace for this string dictionary. +// ----------------------------------------------------------------------------- +// +void CDrmRel2_1StringDict00::NamespaceUri( RString& aUri ) + { + aUri = iStringPool.String( + DrmRel2_1StringDict00TagTable::EUri, + *( iCodepage00Table->StringTable( + CDictionaryCodePage::EStringTypeElement ) ) ); + } + +// Exported proxy for instantiation method resolution +// Define the interface UIDs +const TImplementationProxy ImplementationTable[] = { + IMPLEMENTATION_PROXY_ENTRY( 0x2000B490, + CDrmRel2_1StringDict00::NewL ) }; + +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount ) + { + aTableCount = sizeof( ImplementationTable ) / + sizeof( TImplementationProxy ); + + return ImplementationTable; + }