--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contentmgmt/referencedrmagent/RefTestAgent/RTAParser/attributeparser.cpp Thu Sep 10 14:01:51 2009 +0300
@@ -0,0 +1,214 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:
+* stringparser.cpp
+*
+*/
+
+
+#include <caf/caftypes.h>
+#include "attributeparser.h"
+#include "contentparser.h"
+#include "tags.h"
+
+using namespace ReferenceTestAgent;
+using namespace ContentAccess;
+using namespace Xml;
+
+CAttributeParser* CAttributeParser::NewL(CContentParser& aContentParser)
+ {
+ CAttributeParser* self = new (ELeave) CAttributeParser(aContentParser);
+ return self;
+ }
+
+CAttributeParser::CAttributeParser(CContentParser& aContentParser) : iContentParser(aContentParser)
+ {
+ }
+
+CAttributeParser::~CAttributeParser()
+ {
+ delete iAttributeName;
+ }
+
+void CAttributeParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes)
+ {
+ TPtrC8 tag(aElement.LocalName().DesC());
+
+ if(KAttributeTag().CompareF(tag) == 0)
+ {
+ // attribute tag has the form <attribute name="something">
+ TRAPD(err, iAttributeName = GetTagAttributeL(aAttributes, KNameTag()).AllocL());
+ if(err != KErrNone)
+ {
+ #ifdef _DEBUG
+ LogL(_L("ERROR: Start Element <attribute> missing \"name\" attribute"));
+ #endif
+ User::Leave(err);
+ }
+ #ifdef _DEBUG
+ LogL(_L("Start element <attribute name=\"%S\">"), *iAttributeName);
+ #endif
+ // This will parse the name and call StringParseCompleteL() when done
+ StartChildParserL(CStringParser::NewL(*this), aElement, aAttributes);
+ }
+ else
+ {
+ #ifdef _DEBUG
+ LogL(_L("ERROR: Unexpected start element <%s> inside <attribute> element"), tag);
+ #endif
+ // Not expecting any further tags inside the attribute tag
+ User::Leave(KErrCorrupt);
+ }
+ }
+
+void CAttributeParser::ParseEndElementL(const RTagInfo& aElement)
+ {
+ // Check the end tag is </attribute>
+ if(KAttributeTag().CompareF(aElement.LocalName().DesC()) != 0)
+ {
+ // We should only expect the end tag of the tag we are processing
+ User::Leave(KErrCorrupt);
+ }
+ }
+
+
+void CAttributeParser::StringParseCompleteL(const TDesC& aString)
+ {
+ // List of all possible attributes
+ _LIT8(KAttributeProtected, "protected");
+ _LIT8(KAttributeForwardable, "forwardable");
+ _LIT8(KAttributeModifyable, "modifyable");
+ _LIT8(KAttributeCopyable, "copyable");
+ _LIT8(KAttributeCanPlay, "canplay");
+ _LIT8(KAttributeCanPrint, "canprint");
+ _LIT8(KAttributeCanExecute, "canexecute");
+ _LIT8(KAttributeCanView, "canview");
+ _LIT8(KAttributeRightsNone, "rightsnone");
+ _LIT8(KAttributeRightsPending, "rightspending");
+ _LIT8(KAttributeRightsHaveExpired, "rightshaveexpired");
+ _LIT8(KAttributePreviewAvailable, "previewavailable");
+ _LIT8(KAttributeContentCDataInUse, "contentcdatainuse");
+ _LIT8(KAttributeCanRewind, "canrewind");
+ _LIT8(KAttributeCopyPaste, "copypaste");
+ _LIT8(KAttributeRightsConsumable, "rightsconsumable");
+ _LIT8(KAttributeRightsStateless, "rightsstateless");
+ _LIT8(KAttributeCanMove, "canmove");
+ _LIT8(KAttributeCanRename, "canrename");
+ _LIT8(KAttributeCanAutomaticConsume, "canautomaticconsume");
+ _LIT8(KAttributeContentVersion, "contentversion");
+
+ TInt attribute = 0;
+ TInt value = 0;
+ TPtr8 attributeNamePtr = iAttributeName->Des();
+
+ // see if the named attribute matches any we know
+ if(attributeNamePtr.CompareF(KAttributeProtected()) == 0)
+ {
+ attribute = EIsProtected;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeForwardable()) == 0)
+ {
+ attribute = EIsForwardable;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeModifyable()) == 0)
+ {
+ attribute = EIsModifyable;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCopyable()) == 0)
+ {
+ attribute = EIsCopyable;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanPlay()) == 0)
+ {
+ attribute = ECanPlay;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanPrint()) == 0)
+ {
+ attribute = ECanPrint;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanExecute()) == 0)
+ {
+ attribute = ECanExecute;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanView()) == 0)
+ {
+ attribute = ECanView;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeRightsNone()) == 0)
+ {
+ attribute = ERightsNone;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeRightsPending()) == 0)
+ {
+ attribute = ERightsPending;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeRightsHaveExpired()) == 0)
+ {
+ attribute = ERightsHaveExpired;
+ }
+ else if(attributeNamePtr.CompareF(KAttributePreviewAvailable()) == 0)
+ {
+ attribute = EPreviewAvailable;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeContentCDataInUse()) == 0)
+ {
+ attribute = EContentCDataInUse;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanRewind()) == 0)
+ {
+ attribute = ECanRewind;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCopyPaste()) == 0)
+ {
+ attribute = ECopyPaste;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeRightsConsumable()) == 0)
+ {
+ attribute = ERightsConsumable;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeRightsStateless()) == 0)
+ {
+ attribute = ERightsStateless;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanMove()) == 0)
+ {
+ attribute = ECanMove;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanRename()) == 0)
+ {
+ attribute = ECanRename;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeCanAutomaticConsume()) == 0)
+ {
+ attribute = ECanAutomaticConsume;
+ }
+ else if(attributeNamePtr.CompareF(KAttributeContentVersion()) == 0)
+ {
+ attribute = EContentVersion;
+ }
+ else
+ {
+ #ifdef _DEBUG
+ LogL(_L("ERROR: attribute %S not supported"), attributeNamePtr);
+ #endif
+ User::Leave(KErrCorrupt);
+ }
+
+ // check boolean
+
+ // Convert value to an integer
+ TLex16 lex(aString);
+ User::LeaveIfError(lex.Val(value));
+ iContentParser.SetAttributeL(attribute, value);
+ }