contentmgmt/referencedrmagent/RefTestAgent/RTAParser/attributeparser.cpp
changeset 8 35751d3474b7
--- /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);
+	}